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

Geometry 如何检查点(整数坐标)是否在三角形的斜边内,geometry,collision-detection,Geometry,Collision Detection,我有一个直角三角形,我想检查一个给定的点是否在这个三角形的斜边上。所有点都是纯整数,而不是浮点变量 (断开的图像,原始位置https://tape.bplaced.net/dl/example2.png) 编辑: 所有的绿色方块都在斜边上,白色方块不在斜边上。我知道x,y,角的坐标和我想测试的点的坐标。 所有坐标都是整数(对不起,y在图形中有点偏离)。我将开始这样做: points = an array; delta=y/x acc = 0 j = 0 for (i=0;i<x;i++){

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

(断开的图像,原始位置<代码>https://tape.bplaced.net/dl/example2.png)

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

我将开始这样做:

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)
  }
}
points=一个数组;
δ=y/x
acc=0
j=0
对于(i=0;i 1){
acc-=1
j++
点推(i,j)
}
}
然后你有斜边上的所有点。有更好的画线算法,但这可能是一个开始

这可能有效:


您知道三角形,因此只需为假设创建函数,在您的示例中,它将是
y=5x/12
。如果你现在得到一个分数,比如说
x=6,y=3
,你可以使用这些变量来看看结果是否正确:
3=roundup(5*6/12)
。如果是,则点位于三角形上,如果不是-则不是。

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

对于垂直情况,您只需检查所讨论的点是否在斜边范围内具有y值

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

现在有了m和b,看看候选点的x和y是否满足方程(点的y是否等于m*x+b?)


然而,实际上,你应该检查点的距离,而不是精确相等,因此检查点的y是否在(m*x+b)的某个小增量内。

你说的“斜边上”是什么意思?从这个例子中,我想说,在三角形所描述的框的范围内的任何东西都是合格的。你能添加一些不是“在斜边上”的点吗@raphaelr:你的图像404'd.@raphaelr:不,这次是403。你能上传到一个著名的图像主机吗?