使用贝塞尔曲线算法制作曲线

news/2025/2/21 8:34:59/

一阶贝塞尔曲线

使用两个点绘制线段
p3=p1+(p2-p1)*t

  1. p1:起点;
  2. p2:终点;
  3. t:0-1;
  4. p3:线段L12上的点
    两个点和t的变化(0-1)可得到一条线段

二阶贝塞尔曲线

使用三个点绘制曲线
p12=p1+(p2-p1)*t
p23=p2+(p3-p2)*t
p123=p12+(p23-p12)*t
p12是线段L12上的点,
p23是线段L23上的点,
p123是线段L12 23上的点
控制p2的位置,可改变曲线的弯曲程度

示例

一阶贝塞尔,二阶贝塞尔

using UnityEngine;
public static class Curve
{public static Vector3 CurveOne(Vector3 begin, Vector3 end, float percentage){return begin + (end - begin) * Mathf.Clamp01(percentage);}public static Vector3 CurveTwo(Vector3 begin, Vector3 center, Vector3 end, float percentage){return CurveOne(CurveOne(begin, center, percentage), CurveOne(center, end, percentage), percentage);}
}

绘制曲线

using UnityEngine;
public class DrawCurve : MonoBehaviour
{public Transform point;//位置1public Transform point2;public Transform point3;[Range(1, 1000)]public int length;//曲线平滑程度float t;public LineRenderer line;//显示曲线private void Update(){if (line.positionCount != length + 1)line.positionCount = length + 1;for (int i = 0; i <= length; i++){t = i;line.SetPosition(i, Curve.CurveTwo(point.position, point2.position, point3.position, t / length));}}
}

改变p2位置

using UnityEngine;
public class ChangePos : MonoBehaviour
{[SerializeField] float moveSpeed = 10;private void Update(){transform.position += transform.up * Input.GetAxis("Vertical") * Time.deltaTime * moveSpeed;}
}

画面展示

在这里插入图片描述


http://www.ppmy.cn/news/1051383.html

相关文章

Python爬取斗罗大陆全集

打开网址http://www.luoxu.cc/dmplay/C888H-1-265.html F12打开Fetch/XHR&#xff0c;看到m3u8&#xff0c;ts&#xff0c;一眼顶真&#xff0c;打开index.m3u8 由第一个包含第二个index.m3u8的地址&#xff0c;ctrlf在源代码中一查index&#xff0c;果然有&#xff0c;不过/…

JAVA笔试基础知识-final/static+wait/sleep+tcp/udp

1、final关键字和static关键字的区别 /*** final修饰类&#xff1a;* 使用final修饰类的目的简单明确&#xff0c;表明这个类不能被继承。* 当程序中有永远不会被继承的类时&#xff0c;可以使用final关键字修饰。* 被final修饰的类所有成员方法都将被隐式修饰为final方法。**…

前馈神经网络解密:深入理解人工智能的基石

目录 一、前馈神经网络概述什么是前馈神经网络前馈神经网络的工作原理应用场景及优缺点 二、前馈神经网络的基本结构输入层、隐藏层和输出层激活函数的选择与作用网络权重和偏置 三、前馈神经网络的训练方法损失函数与优化算法反向传播算法详解避免过拟合的策略 四、使用Python…

4.14.媒体协商

那今天呢&#xff1f;我们来看一下是如何进行媒体协商的。开始之前呢&#xff0c;我们再来回顾一下媒体协商的过程。这张图呢&#xff0c;展示的就是媒体协商的过程&#xff0c;那通过这张图&#xff0c;我们可以看到那第一步呢&#xff0c;它首先要调用create offer。创建offe…

竞态条件?如何设计一个抢红包的程序? 说说你的思路

笔者在前两天参加面试的时候被问到了一个场景问题&#xff0c;觉得自己之前准备的确实不妥当&#xff0c;在此抛砖引玉分享思路。 背景了解 首先明确问题&#xff0c;100个人的群组里让你去发一个红包&#xff0c;可以被88个人抢。那么1. 你怎么解决他们争抢的问题。2. 你怎么…

CTFhub-sql注入-绕过空格过滤

常用绕过空格过滤的方法&#xff1a; /**/、()、%0a 1.判断是否存在sqli注入 1 1/**/union/**/select/**/11 1/**/union/**/select/**/12 如果1/**/union/**/select/**/11的显示结果与1/**/union/**/select/**/12的显示结果不一样&#xff0c; 与1的结果一样说明存在注入…

PostMan 测试项目是否支持跨域

使用PostMan可以方便快速的进行跨域测试。 只需要在请求头中手动添加一个Origin的标头&#xff0c;声明需要跨域跨到的域&#xff08;IP&#xff1a;端口&#xff09;就行&#xff0c;其余参数PostMan会自动生成。添加此标头后&#xff0c;请求会被做为一条跨域的请求来进行处…

问道管理:沪指失守3100点 机构判断“市场底”渐行渐近

8月21日&#xff0c;沪深两市股指盘中全线走低&#xff0c;三大股指收盘均跌超1%&#xff0c;其间沪指收盘指数今年以来初次失守3100点&#xff0c;创业板指更是3年多来初次跌破2100点。截至收盘&#xff0c;沪指跌1.24%报3092.98点&#xff0c;深证成指跌1.32%报10320.39点&am…