Я написал функцию в Python, чтобы читать координаты двух точек в списке, вращать их по 3 осям и использовать координаты X и Y после поворота, чтобы провести линию между ними. Я использую эту функцию в программе, чтобы показать трехмерный куб и повернуть его.
def drawline(pointname1,pointname2):
point1x = pointname1[0]
point1y = pointname1[1]
point1z = pointname1[2]
point2x = pointname2[0]
point2y = pointname2[1]
point2z = pointname1[2]
betax = rotationxaxis
betay = rotationyaxis
betaz = rotationzaxis
#x-Axis Rotation
point1x2 = point1x
point1y2 = point1z*math.cos(betax)-point1y*math.sin(betax)
point1z2 = point1z*math.sin(betax)+point1y*math.cos(betax)
point2x2 = point2x
point2y2 = point2z*math.cos(betax)-point2y*math.sin(betax)
point2z2 = point2z*math.sin(betax)+point2y*math.cos(betax)
#y-Axis Rotation
point1x3 = point1z2*math.sin(betay)+point1x2*math.cos(betay)
point1y3 = point1y2
point1z3 = point1z2*math.cos(betay)-point1x2*math.sin(betay)
point2x3 = point2z2*math.sin(betay)+point2x2*math.cos(betay)
point2y3 = point2y2
point2z3 = point2z2*math.cos(betay)-point2x2*math.sin(betay)
#z-Axis Rotation
point1x4 = point1x3*math.sin(betaz)+point1y3*math.cos(betaz)
point1y4 = point1x3*math.cos(betaz)-point1y3*math.sin(betaz)
point1z4 = point1z3
point2x4 = point2x3*math.sin(betaz)+point2y3*math.cos(betaz)
point2y4 = point2x3*math.cos(betaz)-point2y3*math.sin(betaz)
point2z4 = point2z3
pygame.draw.line(display, (255,255,255), (display_width/2+point1x4,display_height/2+point1y4), (display_width/2+point2x4,display_height/2+point2y4))
Моя проблема в том, что если я проведу линию из двух точек с x0 y0 z1 и x0 y0 z-1 и поверните его вокруг оси x или y на 90 °, линии не будет. Но если я нарисую линию с помощью этой функции, которая просто использует координаты x и y, и обе точки имеют одинаковый z. Оно работает. Я пробовал несколько вещей, но это не работает.