【问题标题】:draw a circle in three dimensional coordiantes [duplicate]在三维坐标中画一个圆[重复]
【发布时间】:2021-10-23 14:22:51
【问题描述】:

我想在三维坐标系中画一个圆,给我一个向量,向量与圆相交的角度是90度,交点是圆的中心。半径可以参数化。编辑:我正在为 minecraft 编写服务器插件。至此,我制作了一把可以投掷的剑。我想添加一些装饰。我希望在剑之后有一个圆形的痕迹。但我不明白如何在 3D 坐标中画一个圆,使剑投掷矢量与圆心的交角为 90 度。半径可以是任意的,向量可以进入圆心。我以为我可以在 3 个轴上旋转投掷矢量并得到一个圆圈,但没有任何效果。我需要一个方程,我可以用它画一个给定的圆。

【问题讨论】:

标签: java vector geometry minecraft


【解决方案1】:

你有中心C,法向量N,半径R。似乎你想在圆周上得到点。

首先在圆平面上得到一些基向量。
可能的方式:
显示幅度最大和幅度第二的法向分量。例如,abs(N.X) 最大,abs(N.Z) 次之,abs(N.Y) 最小。使最小的组件为零,交换两个较大的组件,并否定最大的组件。对于此示例,基向量将是:

A = (N.Z, 0, -N.X)

它垂直于法线,因此位于圆平面内。

然后使用vector product 得到下一个基向量(B 将垂直于AN,它也在平面上)

B = N x A

现在标准化向量 AB(使它们成为单位长度)

A = A / len(A)
B = B / len(B)

并且您可以通过参数方程得到圆周上的任何点,其中t0..2*Pi 范围内变化

P(t) = C + R * A * Cos(t) + R * B * Sin(t)

或在组件中:

P.X = C.X + R * A.X * Cos(t) + R * B.X * Sin(t)
and so on 

【讨论】:

  • 获得第一个正交向量的好方法。
猜你喜欢
  • 2018-06-07
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
相关资源
最近更新 更多