已知 A、B、C 的偏移量,ABC 三角形内的点从其原点移动了多少

How much a point inside an ABC triangle moved from its origin, knowing the offset of the A,B,C

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

示例:知道以下点从其原始位置移动:A.x 30%,A.y 45%,B.x 10%,B.y 20%, C.x70%,C.Y60%,求A,B,C三角形内一点P的坐标X,Y移动了多少

如何计算三角形内任意点的偏移量?

既然你有 C++,我将从程序员而不是数学家的角度来回答问题,所以这可能不是最好的数学方法。我计算这个的方法是我首先计算出三角形的最左边和最右边的点,所以这将是具有最低 x 值和最高 x 值的点,然后使用以下公式我们计算它的百分位数位置在三角形内。

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

Y 轴几乎相同。还请注意,首先这个函数 returns 是一个浮动百分位数,因此 0.5 = 50% 以及介于 0% 和 100% 之间的值不能保证该点在三角形内。

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

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

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

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