貝塞爾曲線
掛上指令碼,放入gameObject即可看到效果
/*
* t = [0, 1]
* 一階貝塞爾曲線公式:a = (1 - t) * P0
* b = t * P1
* B = a + b
* 二階貝塞爾公式:a = (1 - t) * (1 - t) * P0
* b = 2 * t * (1 - t)P1
* c = t * t * P2
* B = a + b + c
* 三階貝塞爾曲線: a = (1 - t) * (1 - t) * (1 - t) * P0
* b = 3 * t * (1 - t) * (1 - t) * P1
* c = 3 * t * t * (1 - t) * P2
* d = t * t * t * P3
* B = a + b + c + d
*/
using System;
using System.Collections;
using UnityEngine;
public class Bezier : MonoBehaviour
{
private IEnumerator coTmp;
private float moveSpeed;
[Range(0, 1)] public float tt = 0f;
public Transform obj;
public Transform p0;
public Transform p1;
public Transform p2;
// Start is called before the first frame update
void Start()
{
coTmp = NumberADD(tt, 1, 0.01f, 0.01f, (f) => { tt = f; });
StartCoroutine(coTmp);
}
// Update is called once per frame
void Update()
{
obj.position = Bezier2(tt, p0.position, p1.position, p2.position);
}
// 數值遞增
public IEnumerator NumberADD( float curNum, float targetNum,float le , float time, Action<float> func)
{
for (; curNum <= targetNum; curNum += le)
{
yield return new WaitForSeconds(time);
func(curNum);
}
coTmp = NumberADD(curNum, targetNum, le, time, func);
StopCoroutine(coTmp);
}
/// <summary>
/// 二階貝塞爾曲線
/// </summary>
/// <param name="t">[0, 1]</param>
/// <param name="P0">起點</param>
/// <param name="P1">中間點,越遠彎曲越大</param>
/// <param name="P2">終點</param>
/// <returns></returns>
Vector3 Bezier2(float t, Vector3 P0, Vector3 P1, Vector3 P2)
{
Vector3 a = (1 - t) * (1 - t) * P0;
Vector3 b = 2 * t * (1 - t) * P1;
Vector3 c = t * t * P2;
Vector3 pos = a + b + c;
return pos;
}
}
相關文章
- 貝塞爾曲線基礎部分
- 貝塞爾曲線理解與應用
- canvas bezierCurveTo() 三次貝塞爾曲線Canvas
- 如何理解並應用貝塞爾曲線
- canvas 二次貝塞爾曲線quadraticCurveTo()Canvas
- 貝塞爾曲線(Bezier curve)實現節點連線
- 貝塞爾曲線原理、推導及Matlab實現Matlab
- 自定義View合輯(6)-波浪(貝塞爾曲線)View
- VBA,Shapes.AddCurve SafeArrayOfPoints:=pts 畫貝塞爾曲線
- webGL入門-四階貝塞爾曲線繪製Web
- 一個貝塞爾曲線編輯工具(2d)
- canvas基礎[二]教你編寫貝塞爾曲線工具Canvas
- 【Flutter高階玩法】 貝塞爾曲線的表象認知Flutter
- Flutter 自定義元件之貝塞爾曲線畫波浪球Flutter元件
- Android-貝塞爾曲線實現水波紋動畫Android動畫
- SVG之Path路徑詳解(二),全面解析貝塞爾曲線SVG
- Android日常學習:OpenGL 實踐之貝塞爾曲線繪製Android
- 自定義View合輯(8)-跳躍的小球(貝塞爾曲線)View
- 白話經典貝塞爾曲線及其在 Android 中的應用Android
- Android繪圖最終篇之大戰貝塞爾三次曲線Android繪圖
- 【乾貨滿滿】貝塞爾曲線(Bézier curve)——什麼神仙操作
- 使用二階貝塞爾曲線實現新增購物車動畫動畫
- Flutter BottomAppBar 自定義路徑 + 貝塞爾曲線實現閒魚底部導航FlutterAPP
- Flutter 實戰 - 用貝塞爾曲線畫一個帶文字的波浪球 WidgetFlutter
- 用貝塞爾曲線自己寫的一個電量顯示的控制元件控制元件
- 貝塞爾曲線的css實現——淘寶加入購物車基礎動畫CSS動畫
- Android教你一步一步從學習貝塞爾曲線到實現波浪進度條Android
- CSS transition animation的使用(內含貝賽爾曲線詳解)CSS
- Android 窗簾(Curtain)效果四之賽貝爾曲線優化AndroidAI優化
- 你知道嗎, CoreGraphics繪圖系統和Bezier貝塞爾曲線座標系的順時針方向是相反的!繪圖
- 【flutter高階玩法】貝塞爾實戰1 - 波浪Flutter
- iOS動畫專題·UIView二維形變動畫與CAAnimation核心動畫(transform動畫,基礎,關鍵幀,組動畫,路徑動畫,貝塞爾曲線)iOS動畫UIViewORM
- 塞爾達風之杖渲染解析
- ROC曲線,曲線下的面積(Aera Under Curve,AUC),P-R曲線
- 胡塞爾現象=上下文ContextContext
- 拉姆塞理論:舒爾數(二)
- 拉姆塞理論:舒爾數(一)
- 2018世界盃塞爾維亞vs瑞士誰會贏 塞爾維亞vs瑞士比分預測