Como rotacionar coordenadas de um objeto?
Matemática
EM
Ponto
Avançado
Tenho um objeto (um plano no exemplo) com coordenadas X, Y e Z, quero saber como calculo uma rotação de A graus nesse objeto, se puderem me ajudar eu agradeceria,.
EXEMPLO, PLANO:
ponto x y z
p1 = point(20, 20, 00);
p2 = point(25, 20, 00);
p3 = point(25, 25, 00);
p4 = point(20, 20, 00);
Estou usando o uma formula para rotacionar que encontrei nesse link:
http://www.lcad.icmc.usp.br/~rosane/CG/TransfGeomAndersonIcaro.pdf
No meu caso, tentando rotacionar no eixo Z, ficaria assim:
x = (Px * cos(rotate_rad)) - (Py * sin(rotate_rad));
y = (Px * sin(rotate_rad)) + (Py * cos(rotate_rad));
Onde rotate_rad seria meu angulo convertido em radiano, por exemplo 5º:
5 / 360 * 2 * PI
O meu problema é que ao rotacionar em 5º e depois mais 5º e mais 5º, e assim por diante, o objeto está com a escala sendo diminuída, poderiam me indicar uma solução, na qual a escala se permanecesse a mesma?
P.S.: no link há uma formula por matriz, mas não entendi como ela funciona, pois é para programação, logo uma formula seria mais fácil que uma matriz.
P.S.: se possível, que a formula indicasse em qual ponto rotacionar, pois nesse caso estava rotacionando no x,y e z em 0, queria poder personalizar isso, por exemplo: rotacionar no eixo Z, tomando como base Z = 1, Y = 0.5 e X = 0.