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

阿基米德螺线定义:

阿基米德螺旋线公式: 

  • 极坐标方程为: 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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧然CS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值