我有一个直角三角形,我想检查给定点是否在该三角形的斜边上。所有点都是纯整数,而不是浮点变量。
(残破的图像,原始位置https://tape.bplaced.net/dl/example2.png
)
编辑: 所有绿色方块都在斜边上,白色方块不在。我知道 x、y、角坐标和要测试的点的坐标。所有坐标都是整数(y 在图中有点偏离,抱歉)。
我有一个直角三角形,我想检查给定点是否在该三角形的斜边上。所有点都是纯整数,而不是浮点变量。
(残破的图像,原始位置https://tape.bplaced.net/dl/example2.png
)
编辑: 所有绿色方块都在斜边上,白色方块不在。我知道 x、y、角坐标和要测试的点的坐标。所有坐标都是整数(y 在图中有点偏离,抱歉)。
这可以工作:
您知道三角形,所以只需为斜边创建函数,在您的示例中它将是y = 5x/12
。如果你现在得到一个点,比如说x = 6, y = 3
,你可以使用这些变量来看看它是否正确:3 = roundup(5*6/12)
。如果是,则该点在三角形上,如果不是,则不是。
有两种情况需要处理:一种是斜边是垂直的,另一种不是。
对于垂直情况,您只需检查所讨论的点是否在斜边范围内具有 ay 值。
对于非垂直情况,使用其端点导出斜边方程。直线的方程是 y = mx + b,其中 m 是斜率,即 dx/dy。然后 b = y - mx。
现在你有了 m 和 b,看看候选点的 x 和 y 是否满足方程(点的 y 是否等于 m * x + b ?)。
但是,实际上,您应该检查接近性而不是完全相等,因此检查点的 y 是否在 (m * x + b) 的某个小增量内。
我将开始这样做:
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)
}
}
然后你就有了斜边的所有点。有更好的画线算法,但这可能是一个开始。