我正在为 wpf 编写自定义动画,作为一个非数学人员,我有几个问题......
如果给定两个 Point3D,即 From 和 To,并假设原点位于 0,0,0,我如何计算两点之间的曲线?
一旦我“绘制”了曲线并且我知道它的长度(如何做到这一点?)我如何计算沿线的某个给定距离的 x、y、z 坐标?
谢谢!
要获得从点 A 到点 B 的直线向量:
乙 - 甲
这将转化为:
vector.x = b.x - a.x;
vector.y = b.y - a.y;
vector.z = b.z - a.z;
长度为:
length = Math.Sqrt(vector.x * vector.x +
vector.y * vector.y +
vector.z * vector.z);
要获得沿向量一定距离的点,您需要使向量成为单位向量(长度为 1):
vector.x = vector.x / length;
...
然后乘以你的距离:
vector.x = distance * vector.x;
...
这一切都来自记忆,因此可能无法立即编译。
CodeProject 上有一个用于 C# 的向量类型,它将为您做很多事情。
如果你想要一条曲线,那么你需要:
a) 定义您想要的曲线类型(圆弧、样条曲线等)
b) 更多点(中心、控制点等)
您可能希望将曲线表示为其他变量的一组参数函数:
x = f(t)
y = g(t)
z = h(t)
where 0 <= t <= 1, and
f(0) = from.x, f(1) = to.x
g(0) = from.y, g(1) = to.y
h(0) = from.z, h(1) = to.z
连接任意两点的曲线数不胜数,因此您需要更多信息来决定 f(t)、g(t) 和 h(t) 应该采用哪种形式。要沿曲线移动一个点,您只需让 t 在 0 和 1 之间变化并计算 x、y 和 z 坐标。一种方法是定义一组您希望曲线通过(或接近)的控制点,然后用 样条函数表示参数方程。您无需知道曲线的弧长即可执行此操作。
所以我只是想跟进我的解决方案 - 虽然确实有无数条曲线 - 我的(措辞不佳)问题是如何在曲线上的两点之间绘制 - 最短距离,假设原点为 0, 0,0 和两个 3d 点。我所做的是将我的点从笛卡尔坐标转换为极坐标,在给定时间计算球面点,然后将该点转换回笛卡尔坐标。如果有人想让我发布实际的 C# 代码,请告诉我。