如何检查点(坐标 - 坐标)是否在三角形的斜边内

时间:2010-02-03 16:35:17

标签: geometry collision-detection

我有一个直角三角形,我想检查给定点是否在该三角形的斜边上。所有点都是普通整数,而不是浮点变量。

(图片损坏,原始位置https://tape.bplaced.net/dl/example2.png

编辑: 所有绿色方块都在斜边上,白色方块不在斜边上。我知道x,y,角落的坐标和我要测试的点的坐标。 所有坐标都是整数(y在图中略微偏离,抱歉)。

3 个答案:

答案 0 :(得分:1)

这可行:

你知道三角形,所以只需为连字符创建函数,在你的例子中它将是y = 5x/12。如果您现在得到一个点,比如说x = 6, y = 3,您可以使用这些变量来查看它是否正确:3 = roundup(5*6/12)。如果是这样,那么点就在三角形上,如果没有 - 那就不是。

答案 1 :(得分:1)

有两种情况需要处理:一种是斜边是垂直的,另一种是斜边。

对于垂直情况,您只需检查相关点是否具有斜边范围内的y值。

对于非垂直情况,使用其端点导出斜边的方程。线的方程是y = mx + b,其中m是斜率dx / dy。然后b = y - mx。

既然你有m和b,看看候选点的x和y是否满足等式(点的y是否等于m * x + b?)。

然而,实际上,你应该检查接近度而不是精确相等,所以检查点的y是否在(m * x + b)的某个小的delta之内。

答案 2 :(得分:0)

我会开始这样做:

points = an array;
delta=y/x
acc = 0
j = 0
for (i=0;i<x;i++){
  points.push(i, j)
  acc+=delta
  while (acc > 1){
     acc-=1
     j++
     points.push(i,j)
  }
}

然后你有了斜边的所有要点。绘制线有更好的算法,但这可能是一个开始。