Точки справа от точки O 'вдоль линии, определяемой нижним краем рамки, соответствуют точкам, которые находятся позади наблюдателя, поэтому технически наблюдатель не может их видеть.Чтобы увидеть точки позади вас, это означает, что вам нужно развернуться, поэтому вам нужно изменить положение экрана.Нарисуйте копию рамки черного квадрата справа от точки O ', чтобы новый квадрат был зеркально симметричным изображением исходного квадрата рамки относительно линии, ортогональной линии горизонта и проходящей через точку O'.
Редактировать: Точки с отрицательной глубиной справа от точки O '(т. Е. Точка позади наблюдателя) предполагается отображать выше синей горизонтальной линии ,Это правильный путь.
Я предполагаю, что ваша система координат в трех измерениях берет свое начало в нижнем правом углу квадратной рамки на вашем изображении.Ось x (я думаю, как вы измеряете ширину) проходит вдоль нижнего горизонтального края кадра, а ось y (то, что вы называете высотой) - вдоль правого вертикального края кадра.Ось глубины находится в трех измерениях и перпендикулярна плоскости квадратной рамки (поэтому она параллельна земле).Начинается с нижнего правого угла квадрата рамки.Предположим, что расстояние от точки O 'до правого вертикального края квадрата равно S
, а координаты точки C
равны {C1, C2}
(C1 - это расстояние от точки C до правого вертикального края, а C2 - эторасстояние C от нижнего горизонтального края квадрата).
Учитывая координаты {w, h, d}
(w - ширина, h - высота, d - глубина) точки в трех измерениях, ее представление на двухмерном квадратном экране задается формулами:
x = (S*w + C1*d)/(S+d)
y = (S*h + C2*d)/(S+d)
Таким образом, точки, которые вы привели в качестве примера в комментариях: P1 = {h = 5, w = 5, d = 5}
и P2 = {h = 5, w = 5, d = -10}
Их представление на экране:
P1_screen = {(S*5 + C1*5)/(S+5), (S*5 + C2*5)/(S+5)}
P2_screen = {(S*5 - C1*10)/(S-10), (S*5 - C2*10)/(S-10)}
независимо от ваших параметров S, C1 and C2
.Представление (бесконечной) линии, соединяющей точки P1 и P2, представляется на экране в виде (бесконечной) линии, соединяющей точки P1_screen и P2_screen.Однако, если вы хотите, чтобы 2D-представление видимой части сегмента , соединяющего P1 и P2, необходимо провести (бесконечную) линию между P1_screen и P2_screen и исключить следующие два сегмента: сегмент [P1_screen, P2_screen]
и сегмент from P2_screen along the line up towards the upper top edge
.Вы должны нарисовать на экране только отрезок от бесконечной линии, соединяющей P1_screen и P2_screen, которая начинается от P1_Screen и идет вниз к нижнему горизонтальному краю экрана.