Особенно это заметно, если менять порядок поворотов вокруг осей: ось вращения начинает совпадать с осью фигуры, но при этом перескакивает на ощутимый угол.
Прикрепляю файл с рабочим кодом.
def rotate_object(xs, xe, ys, ye, zs, ze, ax, ay, az, rot_axis ): axcos = math.cos(math.radians(ax)) axsin = math.sin(math.radians(ax)) aycos = math.cos(math.radians(ay)) aysin = math.sin(math.radians(ay)) azcos = math.cos(math.radians(az)) azsin = math.sin(math.radians(az)) def rotY(xs, xe, ys, ye, zs, ze): xs1 = xs*aycos + ys*0 + zs*aysin ys1 = xs*0 + ys*1 + zs*0 zs1 = -xs*aysin + ys*0 + zs*aycos xs = xs1; ys = ys1; zs = zs1 xe1 = xe*aycos + ye*0 + ze*aysin ye1 = xe*0 + ye*1 + ze*0 ze1 = -xe*aysin + ye*0 + ze*aycos xe = xe1; ye = ye1; ze = ze1 return (xs, xe, ys, ye, zs, ze) def rotX(xs, xe, ys, ye, zs, ze): xs1 = xs*1 + ys*0 + zs*0 ys1 = xs*0 + ys*axcos - zs*axsin zs1 = xs*0 + ys*axsin + zs*axcos xs = xs1; ys = ys1; zs = zs1 xe1 = xe*1 + ye*0 + ze*0 ye1 = xe*0 + ye*axcos - ze*axsin ze1 = xe*0 + ye*axsin + ze*axcos xe = xe1; ye = ye1; ze = ze1 return (xs, xe, ys, ye, zs, ze) def rotZ(xs, xe, ys, ye, zs, ze): xs1 = xs*azcos - ys*azsin + zs*0 ys1 = xs*azsin + ys*azcos + zs*0 zs1 = xs*0 + ys*0 + zs*1 xs = xs1; ys = ys1; zs = zs1 xe1 = xe*azcos - ye*azsin + ze*0 ye1 = xe*azsin + ye*azcos + ze*0 ze1 = xe*0 + ye*0 + ze*1 xe = xe1; ye = ye1; ze = ze1 return (xs, xe, ys, ye, zs, ze) xs, xe, ys, ye, zs, ze = rotX(xs, xe, ys, ye, zs, ze) xs, xe, ys, ye, zs, ze = rotY(xs, xe, ys, ye, zs, ze) xs, xe, ys, ye, zs, ze = rotZ(xs, xe, ys, ye, zs, ze) return (xs, xe, ys, ye, zs, ze)