假设我在3D空间中有2个点,其中一个是:
x=2, y=3, z=5
第二个是:
x=6, y=7, z=10
在代码中,通过扩展(例如,加倍)这两点之间的距离(相对于第一点)来计算第三点的坐标的最快方法是什么?
最佳答案
如果您要延伸的点远超出(x2,y2,z2)
而远超过(x1,y1,z1)
:
x3 = x2 + (x2 - x1) (= 10)
y3 = y2 + (y2 - y1) (= 11)
z3 = z2 + (z2 - z1) (= 15)
要么:
(x2 * 2 - x1, y2 * 2 -y1, z2 * 2 - z1)
就那么简单。
如果您想要的不是长度的两倍,则可以缩放
(x2 - x1)
类型的术语。例如,如果您希望它比当前行长50%,则将它们乘以0.5
(+ 50%)。如果要延长三倍,请将其乘以2(+ 200%)。就可以执行此扩展的代码而言,类似这样的代码为您提供了端点
pDest
,该端点与p1
一起形成了percent
乘以p1-p2
大小的行:typedef struct {
double x;
double y;
double z;
} tPoint3d;
void extend (tPoint3d *p1, tPoint3d *p2, double percent, tPoint3d *pDest) {
percent -= 100.0; // what to ADD
percent /= 100.0; // make multiplier
pDest->x = p2->x + percent * (p2->x - p1->x); // scale each point
pDest->y = p2->y + percent * (p2->y - p1->y);
pDest->z = p2->z + percent * (p2->z - p1->z);
}
关于c - 在3D空间中的2点之间延伸线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25012103/