写点什么

【Unity】绘制阿基米德螺旋线

作者:萧然🐳
  • 2022 年 7 月 08 日
  • 本文字数:1005 字

    阅读完需:约 3 分钟

​阿基米德螺线定义:



阿基米德螺旋线公式: 

  • 极坐标方程为: r = a + bθ

  • 平面笛卡尔坐标方程式为: x = (a + bθ)cos(θ), y = (a + bθ)sin(θ)

  • a: 当θ=0°时的极径(mm)

  • b: 阿基米德螺旋线系数(mm/°),表示每旋转 1 度时极径的增加/减小量

  • θ: 极角,单位为度,表示阿基米德螺旋线转过的总度数(弧度)

  • 改变参数 a 将改变螺线形状,b 控制螺线间距离,通常其为常量


测试代码:

public class AchimedeanSpiral : MonoBehaviour{    //极坐标方程为: r = a + bθ    //平面笛卡尔坐标方程式为: x = (a + bθ)cos(θ), y = (a + bθ)sin(θ)    //a: 当θ=0°时的极径(mm)    //b: 阿基米德螺旋线系数(mm/°),表示每旋转1度时极径的增加/减小量    //θ: 极角,单位为度,表示阿基米德螺旋线转过的总度数(弧度)    //改变参数a将改变螺线形状,b控制螺线间距离,通常其为常量
//公式参数 [SerializeField] float parameA = 1; [SerializeField] float parameB = 1; [SerializeField] float parameAngle = 2 * Mathf.PI;
//Z值变化 [SerializeField] float spiralHeightAdded = 0.5f;
//取点间隔角度(弧度) [SerializeField] float intervalAngle = 0.1f;
//保存取样点 List<Vector3> spiralPointList = new List<Vector3>();
//绘制曲线 [SerializeField] LineRenderer lineRenderer;
void Update() { if (Input.GetMouseButtonDown(1)) DrawSpiral(); }
void DrawSpiral() { spiralPointList.Clear();
//隔固定角度取样 float drawAngle = 0; while (drawAngle <= parameAngle) { spiralPointList.Add(GetPointByAngle(drawAngle)); drawAngle += intervalAngle; }
lineRenderer.positionCount = spiralPointList.Count; lineRenderer.SetPositions(spiralPointList.ToArray()); }
float tempX, tempY, tempZ; Vector3 GetPointByAngle(float angle) { //公式计算坐标 tempX = (parameA + parameB * angle) * Mathf.Cos(angle); tempY = (parameA + parameB * angle) * Mathf.Sin(angle); //Z值增量 tempZ = spiralHeightAdded * angle; return new Vector3(tempX, tempY, tempZ); }
}
复制代码


绘制结果:


发布于: 刚刚阅读数: 3
用户头像

萧然🐳

关注

喜欢玩游戏,更喜欢做游戏 2020.03.26 加入

Unity游戏开发者

评论

发布
暂无评论
【Unity】绘制阿基米德螺旋线_Unity_萧然🐳_InfoQ写作社区