Unity
Catmull Rom C# Code
Naku
2019. 1. 10. 07:30
Vector3 GetCatmullRomPoint(Vector3 p, Vector3 p1, Vector3 p2, Vector3 p3, float t) {
float t1 = t * t;
float t2 = t1 * t;
Vector3 pt = 0.5f * ((-p + 3f * p1 - 3f * p2 + p3) * t2
+ (2f * p - 5f * p1 + 4f * p2 - p3) * t1
+ (-p + p2) * t
+ 2f * p1);
return pt;
}
또는
Vector3 GetCatmullRomPoint(Vector3 p, Vector3 p1, Vector3 p2, Vector3 p3, float t) {
Vector3 pt = Vector3.zero;
float t0 = ((-t + 2f) * t - 1f) * t * 0.5f;
float t1 = (((3f * t - 5f) * t) * t + 2f) * 0.5f;
float t2 = ((-3f * t + 4f) * t + 1f) * t * 0.5f;
float t3 = ((t - 1f) * t * t) * 0.5f;
pt.x = p.x * t0 + p1.x * t1 + p2.x * t2 + p3.x * t3;
pt.y = p.y * t0 + p1.y * t1 + p2.y * t2 + p3.y * t3;
pt.z = p.z * t0 + p1.z * t1 + p2.z * t2 + p3.z * t3;
return pt;
}