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ć.

Kopiuj
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();
}