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)
在代码中,通过延长(例如,加倍)这两个点之间的距离(相对于第一个点)来计算第三个点的坐标的最快方法是什么?
如果你想要一个点延伸到(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)