Cześć.
Załóżmy, że mam odcinek [0,1]. Chcę zrobić jego przekształcenie, by np. od punktu 0.25 do 0.5 został wygięty o kąt 90 stopni w lewo, a dalsza jego część, czyli [0.5, 1], biegła dalej po stycznej w punkcie 0.5. Efekt ma być taki, jak po wygięciu pręta.
Zrobiłem wyginanie, ale mam kłopot z tę drugą połową odcinka. Nie wiem, jakiemu przekształceniu je poddać.
int odl = 5, max = 150, x0=150,y0=200,x,y;
float start = 0.25, end = 0.5, pi=3.14159265358, step = 1.0 / max, pos, kat=90.0;
for (pos=0.0; pos<1.0; pos+=step) {
x = pos*max * odl;
y = 0;
if (pos > start) {
// to obraca o zadany kąt
x = start*max*odl + sin( (pos-start)/(end-start) *kat*pi/180.0) * max*(end-start);
y = y + (1-cos( (pos-start)/(end-start) *kat*pi/180.0)) * max*(end-start);
}
if (pos >= end) {
// nie wiem, jakie tu dać przekształcenie
// x = ...;
// y = ...;
}
glBegin(GL_POLYGON);
glColor3f(0.2,0.4,1.0);
glVertex2d(x0+x, y+y0);
glVertex2d(x0+x+3, y+y0);
glVertex2d(x0+x+3, y+y0+3);
glVertex2d(x0+x, y+y0+3);
glEnd();
glBegin(GL_POINTS);
glPointSize(1);
glColor3f(1.0,1.0,1.0);
glVertex2d(pos*max*odl +x0, y0);
glEnd();
}