Transformacion Transformacion::scale(float sx,float sy,float sz, Punto centro) //Acumula el escalado sobre un punto generico { Matriz s; translation(centro); s.setelem(0,0,sx); s.setelem(1,1,sy); s.setelem(2,2,sz); append(s); return translation(centro.negated()); }
Transformacion Transformacion::rotation(float ang, Vector vectorEje, Punto enRecta ) //Acumula el giro alrededor de un eje generico { float lat,lon; lat= vectorEje.latitude(); //latitud lon= vectorEje.longitude(); //longitud //Recordar acumulacion LIFO translation(enRecta); //Rehacer la traslacion rotY(lon); //Rehacer la longitud rotX(-lat); //Rehacer la latitud rotZ(ang); //Girar el angulo rotX(lat); //Deshacer la latitud rotY(-lon); //Deshacer la longitud return translation(enRecta.negated()); //Traslacion al origen }