코딩하는 나귀

Catmull Rom C# Code

Unity2019. 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;

}