知道ABC,三角形内部的一个点从其原点移动了多少,知道A,B,C的偏移量

时间:2017-10-10 07:41:32

标签: algorithm math geometry triangulation

我正在尝试以%为单位测量ABC三角形内一个点的X和Y坐标从其原始位置移动了多少,知道A,B,C点移动了多少%。

示例:知道以下几点从原始位置移开:Ax 30%,Ay 45%,Bx 10%,By 20%,Cx 70%,CY 60%,找出坐标X和Y的多少A,B,C三角形内的点P移动。

如何计算这样一个三角形内任何点的偏移量?

2 个答案:

答案 0 :(得分:1)

我相信你需要Barycentric坐标。最终,这些让您有机会在顶点Pt1, t2, t3的三角形中表示给定点P = a * t1 + b * t2 + c * t3。鉴于此,将三角形转换为t1', t2', t3'后的新坐标将导致P' = a * t1' + b * t2' + c * t3',即您只需将相同的权重应用于每个角落。

考虑到你从笛卡尔坐标开始here是从笛卡儿到重心转换的公式,即找到我之前提到的a, b, c

答案 1 :(得分:0)

由于你确实有c ++,我会回答程序员前瞻性问题,而不是数学家,所以这可能不是最好的数学方法。我计算这个的方法是我首先计算三角形的最左边和最右边的点,这样就是具有最低x值和最高x值的点,然后使用下面的公式我们计算它&#39 ;在三角形内的百分位数。

percentile.x = (rightMostPoint.x - leftMostPoint.x) / (point.x - leftMostPoint.x);

Y轴几乎相同。请注意,首先此函数返回浮点百分位数,因此0.5 = 50%,并且0%和100%之间的值也不能保证该点在三角形内。

现在您知道百分位数,您可以简单地计算百分位数之前和之后的差异。即。

percentileChangeOnX = abs(precentPosBefore.x - precentPosAfter.x);