找到距离源点左边 nVectorLength 的新点

这个问题让我头疼不已...

我正在试图找到一个新点,它总是相对于源点向左移动 nVectorLength 的距离。

注意: x、y、z 值永远不是固定的。

我有两个点:

  1. 源点 (x、y、z)

  2. 终点 (x、y、z),其中源点正在移动。

    - 可用于找出源点正面的朝向(也就是向上的方向)

    - 当你有源点的 x、y、z 值时,不确定是否需要此点。

下面的例子 VectorLength = 22 解释了这个问题:

enter image description here

注意: 红色点是向右绘制的,这应该是向左的。我的错误。

我尝试先将蓝点旋转90度,但我的代码是错误的:

function rotatePoint(point, center, angle)

   angle = (angle) * (math.pi/180)
   local rotatedX = math.cos(angle) * (point.x - center.x) - math.sin(angle) *(point.y - center.y) + center.x
   local rotatedY = math.sin(angle) * (point.x - center.x) + math.cos(angle) *(point.y - center.y) + center.y
   local rotatedZ = math.sin(angle) * (point.x - center.x) + math.cos(angle) *(point.y - center.y) + center.z

   local newPoint = {x = rotatedX, y = rotatedY, z = rotatedZ}
   return newPoint
end

我还没有到设置 nVectorLength 的部分,但我希望有人能给我一个工作示例,说明如何旋转和计算长度。

点赞
用户37213
用户37213

我将假设一个二维空间:你的起点(绿色)、终点(蓝色)和新点(红色)都位于 xy 平面上。有一个垂直于平面的单位向量(0,0,1),指向你。从 x 轴开始,沿逆时针方向旋转为正方向。如果是这样,那么这个问题很容易解决。

  1. 计算从起点到终点的单位向量。我假设你知道如何做。
  2. 将单位向量顺时针旋转 90 度。
  3. 将旋转后的单位向量乘以长度并加到起点坐标上即可得到新的点坐标。

这在三维空间中也适用。您只需要将所需的3D平面转换为2D平面,进行计算,然后再进行转换即可。

2016-09-12 19:08:27