Witam
Napisałem/popełniłem implementacje krzywej beziera.
Jednak uważam, że to co napisałem działa źle ... sam nie wiem.
Moglibyście zobaczyć czy to ma jakiś sens?
Oto kod:
#include <iostream>
#include <cmath>
using namespace std;
float bezier(float x2, float y2, float x3, float y3, float t)
{
if(t > 1)t = 1;
else if (t < 0)t = 0;
float x1, y1 = 0;
float x4, y4 = 1;
//float wynik = (pow((1-t), (1 / 3.0))*x1) + (pow((1-t), (1 / 2.0))*x2*(3*t))+ ((3*pow((t), (1 / 2.0)))*(1-t)*x3)+(pow((t), (1 / 3.0))*x4);
std::cout << "x: " << (pow( (1-t),( 1 / 3.0 ) )*x1)+(3*(pow( (1-t),( 1 / 2.0 ) ))*t*x2)+(3*(t-1)*(pow( t,( 1 / 2.0 ) ))*x3)+((pow( t,( 1 / 3.0 ) ))*x4) << std::endl;
std::cout << "y: " <<(pow( (1-t),( 1 / 3.0 ) )*y1)+(3*(pow( (1-t),( 1 / 2.0 ) ))*t*y2)+(3*(t-1)*(pow( t,( 1 / 2.0 ) ))*y3)+((pow( t,( 1 / 3.0 ) ))*y4) << std::endl;
std::cout << "t: " << t << std::endl;
}
int main() {
for(float t = 0; t <= 1.1; t+=0.1)
bezier(0, 0, 1, 1, t);
return 0;
}
Link do ideone -> https://ideone.com/LYSQWS
Sugerowałem się tymi stronami:
http://corel.wodip.opole.pl/krzywe_beziera/krzywe_beziera.htm
http://www.algorytm.org/podstawy-grafiki/krzywa-beziera.html
http://cubic-bezier.com/#0,0,1,1
http://www.w3schools.com/cssref/css3_pr_animation-timing-function.asp
Na początek chciałbym uzyskać funkcje liniową żebym mógł sprawdzić czy wartości są poprawne bo jeśli P1 = 0 a P4 = 1 to t=0.5 da wynik funkcji liniowej też 0.5 jednak takiego nie otrzymuje stąd wiem, że funkcja nie działa poprawnie.