我正在尝试以%为单位测量ABC三角形内一个点的X和Y坐标从其原始位置移动了多少,知道A,B,C点移动了多少%。
示例:知道以下几点从原始位置移开:Ax 30%,Ay 45%,Bx 10%,By 20%,Cx 70%,CY 60%,找出坐标X和Y的多少A,B,C三角形内的点P移动。
如何计算这样一个三角形内任何点的偏移量?
答案 0 :(得分:1)
我相信你需要Barycentric坐标。最终,这些让您有机会在顶点P
为t1, 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);