1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- // --------------------------------------------------------------------------------------------------------------------
- // <copyright file="Bezier.cs" company="Exit Games GmbH">
- // Part of: Photon Unity Networking Demos
- // </copyright>
- // <summary>
- // Original: http://catlikecoding.com/unity/tutorials/curves-and-splines/
- // Used in SlotRacer Demo
- // </summary>
- // <author>developer@exitgames.com</author>
- // --------------------------------------------------------------------------------------------------------------------
- using UnityEngine;
- namespace Photon.Pun.Demo.SlotRacer.Utils
- {
- public static class Bezier
- {
- public static Vector3 GetPoint(Vector3 p0, Vector3 p1, Vector3 p2, float t)
- {
- t = Mathf.Clamp01(t);
- float oneMinusT = 1f - t;
- return
- oneMinusT * oneMinusT * p0 +
- 2f * oneMinusT * t * p1 +
- t * t * p2;
- }
- public static Vector3 GetFirstDerivative(Vector3 p0, Vector3 p1, Vector3 p2, float t)
- {
- return
- 2f * (1f - t) * (p1 - p0) +
- 2f * t * (p2 - p1);
- }
- public static Vector3 GetPoint(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t)
- {
- t = Mathf.Clamp01(t);
- float OneMinusT = 1f - t;
- return
- OneMinusT * OneMinusT * OneMinusT * p0 +
- 3f * OneMinusT * OneMinusT * t * p1 +
- 3f * OneMinusT * t * t * p2 +
- t * t * t * p3;
- }
- public static Vector3 GetFirstDerivative(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t)
- {
- t = Mathf.Clamp01(t);
- float oneMinusT = 1f - t;
- return
- 3f * oneMinusT * oneMinusT * (p1 - p0) +
- 6f * oneMinusT * t * (p2 - p1) +
- 3f * t * t * (p3 - p2);
- }
- }
- }
|