在 3D 空间中的 2 点之间延伸一条线

Set*_*337 0 c 3d geometry line points

假设我在 3D 空间中有 2 个点,其中一个位于:

x=2, y=3, z=5
Run Code Online (Sandbox Code Playgroud)

第二个位于:

x=6, y=7, z=10
Run Code Online (Sandbox Code Playgroud)

在代码中,通过延长(例如,加倍)这两个点之间的距离(相对于第一个点)来计算第三个点的坐标的最快方法是什么?

pax*_*blo 5

如果你想要一个点延伸到(x2,y2,z2)超出 的范围(x1,y1,z1)

x3 = x2 + (x2 - x1) (= 10)
y3 = y2 + (y2 - y1) (= 11)
z3 = z2 + (z2 - z1) (= 15)
Run Code Online (Sandbox Code Playgroud)

或者:

(x2 * 2 - x1, y2 * 2 -y1, z2 * 2 - z1)
Run Code Online (Sandbox Code Playgroud)

就那么简单。

如果您想要的不是双倍长度,您可以缩放(x2 - x1)-type 项。例如,如果您希望它比当前行长 50%,请将它们乘以0.5(+50%)。如果您想要时间延长三倍,请将它们乘以二 (+200%)。

就可以执行此扩展的代码而言,类似这样,它为您提供了一个端点pDest,并且形成了一条乘以 大小的p1线:percentp1-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);
}
Run Code Online (Sandbox Code Playgroud)