我有一个直角三角形,我想检查给定的点是否在三角形的低音线上。所有的点都是纯整数,而不是浮点变量.
(破损图像,原始位置https://tape.bplaced.net/dl/example2.png
)
编辑:所有的绿色方块将在低音上,白色方块不会。我知道x,y,角的坐标和我想测试的点的坐标。所有坐标都是整数(抱歉,图中y有点偏离)。
发布于 2010-02-03 10:23:46
这样做是可行的:
您知道三角形,所以只需为低键使用创建函数,在您的示例中,它将是y = 5x/12
。如果您现在得到了一个点,比如x = 6, y = 3
,您可以使用这些变量来查看它是否正确:3 = roundup(5*6/12)
。如果是的话,那点就在三角形上,如果不是,那就不是。
发布于 2010-02-03 10:38:51
有两种情况需要处理:一种是垂直的,另一种不是垂直的。
对于垂直情况,您只需检查所讨论的点在低音值范围内是否有y值。
对于非垂直情况,利用其端点推导出低音的方程.直线方程为y= mx +b,其中m为dx/dy的斜率。那么b=y- mx。
现在有了m和b,看看候选点的x和y是否满足方程(点的y等于m*x+b吗?)
但是,实际上,您应该检查是否接近,而不是完全相等,因此检查点的y是否在(m *x+ b)的某个小的增量内。
发布于 2010-02-03 10:18:19
我会开始这么做:
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)
}
}
然后你就有了所有的低音点。有更好的算法来绘制线条,但这可能是一个开始。
https://stackoverflow.com/questions/2193547
复制相似问题