C# 计算两条线段交点的位置
线段A,和线段B,直接求得AB的交点坐标,然后再判断该交点坐标是否在定长线段B的内部就可以了啊
AB本身就是两条直线,知道两端点就可以知道其直线方程,B也是一样,两个方程联立,
得到一个坐标,再看该坐标是否在B的定义域内就可以啊
首先,我们指定直线方程都有:
1:一般式:Ax+By+C=0(A、B不同时为0)【适用于所有直线】
,
A1/A2=B1/B2≠C1/C2←→两直线平行
A1/A2=B1/B2=C1/C2←→两直线重合
横截距a=-C/A
纵截距b=-C/B
2:点斜式:y-y0=k(x-x0) 【适用于不垂直于x轴的直线】
表示斜率为k,且过(x0,y0)的直线
3:截距式:x/a+y/b=1【适用于不过原点或不垂直于x轴、y轴的直线】
表示与x轴、y轴相交,且x轴截距为a,y轴截距为b的直线
4:斜截式:y=kx+b【适用于不垂直于x轴的直线】
表示斜率为k且y轴截距为b的直线
5:两点式:【适用于不垂直于x轴、y轴的直线】
表示过(x1,y1)和(x2,y2)的直线
两点式
(y-y1)/(y2-y1)=(x-x1)/(x2-x1) (x1≠x2,y1≠y2)
6:交点式:f1(x,y) *m+f2(x,y)=0 【适用于任何直线】
表示过直线f1(x,y)=0与直线f2(x,y)=0的交点的直线
7:点平式:f(x,y) -f(x0,y0)=0【适用于任何直线】
表示过点(x0,y0)且与直线f(x,y)=0平行的直线
法线式
8:法线式:x·cosα+ysinα-p=0【适用于不平行于坐标轴的直线】
过原点向直线做一条的垂线段,该垂线段所在直线的倾斜角为α,p是该线段的长度
9:点向式:(x-x0)/u=(y-y0)/v (u≠0,v≠0)【适用于任何直线】
表示过点(x0,y0)且方向向量为(u,v )的直线
10:法向式:a(x-x0)+b(y-y0)=0【适用于任何直线】
表示过点(x0,y0)且与向量(a,b)垂直的直线
此处我们使用的是两点式:
A的两点为(x1,y1),(x2,y2)
则A的直线方程为l1:y-y1=(y2-y1)(x-x1)/(x2-x1)
B的两点为(x3,y3),(x4,y4)
则B的直线方程为l2:y-y3=(y4-y3)(x-x3)/(x4-x3)
联立解出交点坐标为的横坐标为:
x=(k2x3-y3-k1x1+y1)/(k2-k1)
其中k1=(y2-y1)/(x2-x1)
k2=(y4-y3)/(x4-x3)
可以推导出来
x = ((x2 - x1) * (x3 - x4) * (y3 - y1) -
x3 * (x2 - x1) * (y3 - y4) + x1 * (y2 - y1) * (x3 - x4)) /
((y2 - y1) * (x3 - x4) - (x2 - x1) * (y3 - y4));
同理也可以推导出y的值:
y = ((y2 - y1) * (y3 - y4) * (x3 - x1) -
y3 * (y2 - y1) * (x3 - x4) + y1 * (x2 - x1) * (y3 - y4)) /
((y2 - y1) * (y3 - y4) - (y2 - y1) * (x3 - x4));
此处即是计算角点的程序:
/// <summary>/// 计算多边形的边与直线之间是否相交。相交则碰撞/// </summary>/// <param name="a">/线段A为的起点</param>/// <param name="b">线段A为的终点</param>/// <param name="c">线段B的起点</param>/// <param name="d">线段B的终点</param>/// void IntersectionPoint(Vector3 a,Vector3 b, Vector3 c, Vector3 d){if ( ( (c.x < orthogon_B_x && d.x > orthogon_A_x) || (d.x < orthogon_B_x && c.x > orthogon_A_x ) ) && ((c.y < orthogon_B_y && d.y > orthogon_A_y) || (d.y < orthogon_B_y && c.y > orthogon_A_y)) ){Vector3 Intersection = new Vector3();Intersection.x = ((a.x - b.x) * (c.x * d.z - d.x * c.z) - (c.x - d.x) * (a.x * b.z - b.x * a.z)) / ((c.x - d.x) * (a.z - b.z) - (a.x - b.x) * (c.z - d.z));Intersection.z = ((a.z - b.z) * (c.x * d.z - d.x * c.z) - (c.z - d.z) * (a.x * b.z - b.x * a.z)) / ((c.x - d.x) * (a.z - b.z) - (a.x - b.x) * (c.z - d.z));Intersection.y = orthogon_B.y;if (Intersection.z < orthogon_A_z && Intersection.z >= orthogon_B_z) //一重判断,如何目标对象的Z轴在两个基站之间{middleObj.transform.position = Intersection;Debug.Log(Intersection);}}}
C# 计算两条线段交点的位置相关推荐
- java 圆的交点_java计算两条线段交点
1.判断斜率相同不,y2-y1/x2-x1,y4-y3/x4-x3,相同则无交点,不相同说明直线有交点则执行第二步: 2.设y=ax+b,通过斜率可求出a的值,通过坐标可以求出b的值,这样两个线段所在 ...
- 坐标求交点java_java计算两条线段交点
1.判断斜率相同不,y2-y1/x2-x1,y4-y3/x4-x3,相同则无交点,不相同说明直线有交点则执行第二步: 2.设y=ax+b,通过斜率可求出a的值,通过坐标可以求出b的值,这样两个线段所在 ...
- 【数学计算】判断两条线段是否相交+计算两条线段的交点和夹角
序言 还是那句话,学习是为了应用.书到用时方恨"用得少" 1. 计算两条直线的交点 直线一般式方程 A x + B y + C = 0 Ax+By+C = 0 Ax+By+C=0 ...
- 使用Matlab计算两条线的交点及三角形垂心
Matlab版本:R2016A 操作系统:Win-8 为了让整个流程比较完整, 1.我用了12个点,每两个点一条线,能组成6条线: 2.每两条线相交于一点,一共有3个点: 3.3个点构成了三角形的三个 ...
- CocosCreator实战篇 | 两条线段交点
- 平面内两条线段的位置关系(相交)判定与交点求解
http://www.cnblogs.com/devymex/archive/2010/08/19/1803885.html 概念 平面内两条线段位置关系的判定在很多领域都有着广泛的应用,比如游戏.C ...
- c语言 两条线段位置,C++/STL实现判断平面内两条线段的位置关系代码示例
概念 平面内两条线段位置关系的判定在很多领域都有着广泛的应用,比如游戏.CAD.图形处理等,而两线段交点的求解又是该算法中重要的一环.本文将尽可能用通俗的语言详细的描述一种主流且性能较高的判定算法. ...
- 二维空间内,如何判断两条线段是否相交,相离,平行,重合,并求交点
首先,假设有两条线段p,q,求这两条线段的空间关系. 我们把两条线段的四个顶点看为向量,用坐标表示:p1(p1x,p1y), p2(p2x,p2y), q1(q1x,q1y), q2(q2x, q2y ...
- 位置关系C语言,C++/STL实现判断平面内两条线段的位置关系代码示例
概念 平面内两条线段位置关系的判定在很多领域都有着广泛的应用,比如游戏.CAD.图形处理等,而两线段交点的求解又是该算法中重要的一环.本文将尽可能用通俗的语言详细的描述一种主流且性能较高的判定算法. ...
最新文章
- java整数常量区_在Java中,我可以用二进制格式定义一个整数常量吗?
- .net完整的图文验证
- 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...
- css 样式设计学习记录(0)
- linux网络管理基本命令
- 熊孩子巨额充值打赏,互联网公司该不该退钱?
- 中国最好学科排名发布:北大14个学科全国第一,北京高校上榜数居首
- Jmeter响应中中文乱码怎么解决?
- 国家邮政局:前10月邮政行业业务收入同比增长17.8%
- 大数据之-Hadoop之HDFS的API操作_写数据流程_上传数据原理剖析_案例---大数据之hadoop工作笔记0066
- htmlcss面试笔记
- 网络协议分析(Network Protocol Analysis)之IPCP、认证协议PAP与CHAP
- 从非结构化数据到特色数据指标,AI如何更懂金融?
- Adb connection Error: adb关闭,adb重启。BUG
- DEA博弈交叉效率matlab,基于博弈交叉效率DEA模型的服务模块化创新绩效测量—以江西省文化创意产业为例...
- 怎么拷贝计算机桌面,电脑怎么拷贝软件
- Socket编程面试题
- 功不唐捐 玉汝于成---贪心算法终结
- 《人在囧途》- 我30岁了,转行学编程可以吗?
- 英飞凌TC397移植FreeRTOS