我有一个直角三角形,我想检查给定点是否在该三角形的斜边上。所有点都是普通整数,而不是浮点变量。
(图片损坏,原始位置https://tape.bplaced.net/dl/example2.png
)
编辑: 所有绿色方块都在斜边上,白色方块不在斜边上。我知道x,y,角落的坐标和我要测试的点的坐标。 所有坐标都是整数(y在图中略微偏离,抱歉)。
答案 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)
}
}
然后你有了斜边的所有要点。绘制线有更好的算法,但这可能是一个开始。