Bir eğrinin parametrik olarak tanımlanması için Pierre Bézier tarafından ~1960 yıllarda bulunmuştur. P0, P1, P2, … PN olmak üzere n adet kontrol noktası bulunur. n eğrinin derecesini temsil eder ( 1->linear; 2->quadratic; 3->cubic; …).
Eğer iki kontrol noktamız varsa P0 ve P1; (Linear)
P0 noktasından P1 noktasına giden bir noktanın ardında bıraktığı iz olarak düşünebilirsiniz. Yani aslında lineer interpolasyon yapıyoruz 🙂
Eğer üç noktamız varsa P0, P1 ve P2; (Quadratic)
P0 noktasından P1 noktasına giden noktaya A;
P1 noktasından P2 noktasına giden noktaya B diyelim;
Artık elimizde A ve B olmak üzere iki nokta var;
A noktasından B noktasına giden noktanın ardında bıraktığı iz bize eğrimizi verecektir.
Yani uzun lafın kısası yaptığımız şey lineer interpolasyondan başka bir şey değil.
Quadratic Curve

glm::vec3 bezierQuadratic(
const glm::vec3& a,
const glm::vec3& b,
const glm::vec3& c,
float t)
{
glm::vec3 ab = glm::mix(a, b, t);
glm::vec3 bc = glm::mix(b, c, t);
return glm::mix(ab, bc, t);
}- a, b ve c birer nokta t de [0, 1] aralığında değişkenimiz.
- glm::mix ise lineer interpolasyon fonksiyonumuz.
- a’dan b’ye giden noktamız ab
- b’den c’ye giden noktamız bc
- ab noktasından bc noktasına giden noktamızın koordinatı:
glm::mix(ab, bc, t);
Cubic Curve

glm::vec3 bezierCubic(
const glm::vec3& a,
const glm::vec3& b,
const glm::vec3& c,
const glm::vec3& d,
float t)
{
glm::vec3 ab = glm::mix(a, b, t);
glm::vec3 bc = glm::mix(b, c, t);
glm::vec3 cd = glm::mix(c, d, t);
glm::vec3 ab_bc = glm::mix(ab, bc, t);
glm::vec3 bc_cd = glm::mix(bc, cd, t);
return glm::mix(ab_bc, bc_cd, t);
}mix performs a linear interpolation between x and y using a to weight between them. The return value is computed as x×(1−a)+y×a.

Leave a Reply