java - 在三维坐标中画一个圆
问题描述
我想在三维坐标中画一个圆,给我一个向量,向量与圆相交的角度是90度,交点是圆的中心。半径可以参数化。编辑:我正在为 minecraft 编写服务器插件。至此,我制作了一把可以投掷的剑。我想添加一些装饰。我希望在剑之后有一个圆形的痕迹。但我不明白如何在 3D 坐标中画一个圆,使剑投掷矢量与圆心的交角为 90 度。半径可以是任意的,向量可以进入圆心。我以为我可以在 3 个轴上旋转投掷矢量并得到一个圆圈,但没有任何效果。我需要一个方程,我可以用它画一个给定的圆。
解决方案
你有 center C
, normal vector N
, radius R
。似乎你想在圆周上得到点。
首先在圆平面上得到一些基向量。
可能的方式:
显示最大幅度和第二幅度的法向分量。例如,abs(N.X)
是最大的,abs(N.Z)
具有第二个量级,并且abs(N.Y)
是最小的。使最小的组件为零,交换两个较大的组件,并否定最大的组件。对于此示例,基向量将是:
A = (N.Z, 0, -N.X)
它垂直于法线,因此位于圆平面内。
然后使用向量积得到下一个基向量(B
将垂直于A
和N
,它也位于平面内)
B = N x A
现在规范化向量A
和B
(使它们单位长度)
A = A / len(A)
B = B / len(B)
并且您可以使用参数方程在圆周上得到任何点,其中t
范围的变化0..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
推荐阅读
- vue.js - 属性或方法...未在实例上定义,但在渲染期间引用
- java - 为什么我无法运行 hadoop jar 文件,每次运行时都说找不到类异常 itemclick.itemclick.ItemClick?
- c++ - 使用 fstream 库并在屏幕上打印文件有问题吗?
- python - 在python中访问另一个类中一个类的私有变量
- c# - 身份验证角色不起作用.net core mvc
- android - 如何删除以编程方式添加新联系人时添加的 Android 联系人应用程序中的重复条目?
- vim - 如何在不破坏表格的情况下重新格式化 asciidoc
- cluster-computing - 通过 Dask 向 PBS 提交自定义作业脚本?
- postgresql - 在 PostgreSQL 中更新和插入与 Upsert
- rust - 如何获得持久的`Vec
.last()` 指针?