Проблема с высоты птичьего полета или 2.5D рендеринга карты

Я разрабатываю пошаговое навигационное программное обеспечение и использую следующее решение, чтобы превратить мои линии дорог в 2.5D или 3D View.

Нарисуйте 2.5D или 3D карту с C # из линий

Однако вышеприведенное решение вполне подходит для линий в пределах порта просмотра, который равен 0 <x <ширина и 0 <y <высота. Однако есть линии, у которых его точки могут иметь y <0 или x <0 или y> высоту или x> ширину, и тогда вышеуказанное решение сошло с ума. Может ли кто-нибудь помочь мне понять, как решить проблему?

vvvv с 3D алгоритмом vvvv

.

vvvv без трехмерного алгоритма vvvv

Обновление :: После использования этого кода

double x = p->x();
double y = p->y();

double t = -0.5;
x = x - w / 2;
y = y - h / 2;
double a = h / (h + y* sin(t));
double u = a * x + w / 2;
double v = a * y * cos(t) + h / 2;

p->setX(u);
p->setY(v);
return p;

Карта становится похожей на следующую

Я думаю, что с вычислениями Y что-то не так, когда они выходят далеко за пределы отрицательных значений. Я использую Qt и трещины в строке кажутся ошибкой с Qt рендерером, не связанной с нашей первоначальной проблемой.

Ответы на вопрос(2)

Ваш ответ на вопрос