判断两条线段的相对位置,用int[] s1表示第一条线段,int[] s2表示第二条线段,即两线段两端点的坐标为:
(s1[0],s1[1]),(s1[2],s1[3])和(s2[0],s2[1]),(s2[2],s2[3])。如果两线段没有交点则返回"NO",只有一个交点则返回"POINT",多个交点则返回"SEGMENT"。
public class TestLine {
/**
* @return 上1下-1左-1右1中0
*/
public static int relative(int x1, int y1, int x2, int y2, int px, int py) {
x2 -= x1; //把x1,y1看成原点,转换成相对原点的坐标
y2 -= y1;
px -= x1;
py -= y1;
int flag = px * y2 - py * x2; //判断P点在线段所在直线的上方还是下方还是线段上
if (flag == 0) {
flag = px * x2 + py * y2; //向量相乘,x1*x2+y1*y2=|a|*|b|*cosα,正负可推出相对原点(x1,y1)的位置
if (flag > 0) {
px -= x2;
py -= y2; //转换px,py相对x2,y2的坐标,即把x2,y2看成原点
flag = px * x2 + py * y2; //向量相乘
if (flag < 0) { //点位于线段上
flag = 0;
}
}
}
return (flag < 0) ? -1 : ((flag > 0) ? 1 : 0);
}
public static String testState(int[] s1, int[] s2) {
int[] state = new int[4];
state[0] = relative(s2[0], s2[1], s2[2], s2[3], s1[0], s1[1]);
state[1] = relative(s2[0], s2[1], s2[2], s2[3], s1[2], s1[3]);
state[2] = relative(s1[0], s1[1], s1[2], s1[3], s2[0], s2[1]);
state[3] = relative(s1[0], s1[1], s1[2], s1[3], s2[2], s2[3]);
int zeroCount = 0;
for (int i = 0; i < state.length; i++) {
if (state[i] == 0)
zeroCount++;
}
if ((state[0] * state[1] > 0) || (state[2] * state[3] > 0)) {
return "NO";
} else if (zeroCount > 1) {
if (zeroCount > 2)
return "SEGMENT";
int index1 = 0;
int index2 = 0;
if (state[0] != 0)
index1 = 2;
if (state[2] != 0)
index2 = 2;
if (s1[index1] == s2[index2] && s1[++index1] == s2[++index2]) {
return "POINT";
}
return "SEGMENT";
} else
return "POINT";
}
public static void main(String[] args) {
int[] s1 = new int[] { 0, 0, 0, 1 };
int[] s2 = new int[] { 0, 1, 0, 2 };
System.out.println(testState(s1, s2));
}
}
输出结果:POINT
分享到:
相关推荐
在计算机图形学和算法设计中,判断两条线段是否相交是一个常见的问题。线段是由两点定义的有限直线部分,而直线则是无限延伸的。这个问题在几何计算、碰撞检测、图形绘制等领域都有广泛的应用。本篇文章将深入探讨...
通过解答实际问题,如求解点到直线的距离、找出两平行线间的距离,或者判断两条直线的平行和垂直,可以加深对这些概念的掌握。例如,题目中给出的例子涉及到求解点(a,2)到直线x-y+3=0的距离,或者通过斜率关系判断两...
题目中指出,两条直线为异面直线是它们没有公共点的充分不必要条件,这意味着异面直线必然没有公共点,但没有公共点的两条直线不一定异面,还可能是平行。 3. **几何体中的线与面关系**: - 在平行六面体中,题目...
这些角在平行线的条件下都是相等的,这是判断两条直线是否平行的重要依据。 在了解了相交线和平行线的基本概念后,我们进一步学习了对顶角、余角和补角的概念。对顶角已在前面有所提及,现在我们来看余角和补角。...
【中学六年级数学下册 7.1 两条直线的位置关系导学案1】主要涵盖了对顶角、互为余角和互为补角的概念及其性质。在这一课时中,学生需要掌握以下知识点: 1. **对顶角**:对顶角是两条直线交叉相交时,位于彼此对面...
根据方程组解的情况,我们可以判断两条直线的相对位置:如果方程组有唯一解,则两条直线在平面上相交于一点;如果方程组无解,则两条直线平行;如果方程组有无数解,则两条直线重合,它们实际上是同一条直线。 本...
当判断两个平面是否平行时,我们采用的判定条件是:如果在一个平面内的两条相交直线分别平行于另一个平面内的两条相交直线,那么这两个平面是平行的。举例来说,如果线段AB平行于线段DE,同时线段BC平行于线段EF,...
在七年级数学的学习过程中,第二章相交线与平行线中的两条直线的位置关系是学生必须掌握的重要知识点。本章节涵盖了余角、补角、对顶角等基本概念,并进一步涉及角度的计算、识别以及这些角度间的关系。本篇同步测试...
在两条直线相交的情况下,形成的对顶角不仅位置相对,大小也相等;而邻补角则是共享一条边,且两个角的和为180度。这些角的概念不仅在题目中频繁出现,也在几何图形分析中扮演了重要角色。例如,当题目中给出两个角...
本文主要涉及的是中学六年级数学中关于“两条直线的位置关系”的知识点,具体包括以下几个方面: 1. **直线的基本概念**:线段有两个端点,射线有一个端点,而直线没有端点。这涉及到几何的基本元素,是后续学习的...
【对顶角】对顶角是指在两条直线相交时,位于相对位置的两个角。如图中的∠1和∠2,它们共享公共边AO,并且分别位于直线AB和CD的两侧。根据对顶角的性质,如果两条直线相交,那么对顶角相等,即∠1=∠2。 【余角和...
这部分内容展示了一个C/C++实现的函数`IsLineSegmentCross()`,用于判断两条线段是否相交。线段由两个端点定义,例如线段AB由点A和点B组成。函数的四个参数分别代表两个线段的端点。其基本思想是利用向量的概念,...
在《两条直线的位置关系》这一课中,我们首先从日常生活中简单的剪刀剪切动作开始,让学生们注意到在剪刀两刃相交时,所形成的两个相对的角——即对顶角。通过实际的操作与观察,学生们能够直观地感受到对顶角同时...
判断两条直线是否为异面直线,一个关键的依据是它们不能在同一平面上找到一个公共点。空间中的两条直线只有三种可能的位置关系:相交、平行或异面。相交直线在同一平面内有一个公共点;平行直线在同一平面内没有公共...
随后,通过具体例子,如判断直线AB与CD的相对位置,让学生将所学知识应用于实践中,以此来锻炼他们的问题分析与解决能力。 在本节课的教学中,教师需要特别注意学生在不同阶段的接受程度和理解深度,采用不同的教学...
课件中强调的“同位角相等,两直线平行”是判断两条直线平行的一个重要条件。何为同位角?当两条直线被第三条直线(截线)所截时,位于截线两侧相同位置的角被称为同位角。根据平行线的性质,如果两条直线平行,那么...
在实际操作中,通过构造两条相交线并找出这两条线在其他投影面上的平行投影,我们可以判断两个平面是否平行。 确定两个平面是否平行时,我们通常会检查每个平面上的两条相交线在其他投影面上的投影是否平行。如果在...
对于异面直线所成的角,它是两条异面直线在某个平面上的投影形成的角,这个角度量了两条直线在空间中的相对位置。计算异面直线所成角通常需要找到合适的投影平面,并利用等角定理进行求解。 在解决实际问题时,如...
当两条直线相交时,会形成四个角,这些角中,相邻的两个角被称为邻补角,相对的两个角被称为对顶角。学生需要明白对顶角的性质——它们是相等的。这是基于直线交叉后角度分配的规律而形成的几何性质。掌握好对顶角的...
Intersection程序说明 该程序是应聘同豪土木工程咨询... 若共面,输出两直线的平面相对位置(重合、平行或相交); 若相交,输出交点坐标. 步骤: 1.判断是否共面 2.若共面,判断平行、重合还是相交 3.若相交,求交点