假设我在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/

10-14 12:56