Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Масшабирование при рисовании фигур

Автор: samec 15.11.2008 14:57

Добрый день.
есть пара функций:

{функции перевода из 3d в 2d}
function CoordX(P: tPoint;zoom:real): integer;
begin
CoordX:=Trunc(centerX+(zoom*P.Y-zoom*P.X));
end;
function CoordY(P: TPoint;zoom:real): integer;
begin
CoordY:=Trunc(centerY-(zoom*P.Z-zoom*P.X));
end;



все точки для рисования фигуры пользователь вводит сам в массив точек tPoint. Хотелось бы узнать, как в зависимости от того, какие значения координат точек ввел пользователь правильно выбрать zoom? Подскажите smile.gif

Автор: Lapp 15.11.2008 15:54

Цитата(samec @ 15.11.2008 10:57) *
Хотелось бы узнать, как в зависимости от того, какие значения координат точек ввел пользователь правильно выбрать zoom? Подскажите smile.gif

Если я правильно понял, тебе нужна проекция на плоскость. И если я не ошибаюсь, то с учетом перспективы. По всей видимости, параметр zoom в приведенных тобой формулах выполняет (косвено) роль указания, на каком расстоянии от поскости прекции находится точка зрения. Сходу врубиться в твои формулы мне, честно гря, не удалось. Мне, извини, проще нарисовать свои. С объяснением smile.gif. Надо?

Автор: volvo 15.11.2008 16:06

Если нигде не ошибся, то так:
с учетом того, что все точки с координатами (CoordX, CoordY) должны помещаться на экране, имеем:

centerX + zoom*max_of(Y - X) <= getmaxX, откуда zoom <= centerX/max_of(Y - X)
и
centerY + zoom*max_of(X - Z) <= getmaxY, откуда zoom <= centerY/max_of(X - Z)
значит, zoommax = MIN[ centerX/max_of(Y - X), centerY/max_of(X - Z) ]

Точно так же (из неравенств: centerX + zoom*min_of(Y - X) >= 0 и centerY + zoom*min_of(X - Z) >= 0) находишь
zoommin = MAX[ -centerX/min_of(Y - X), -centerY/min_of(X - Z) ]

где max_of/min_of - максимальные/минимальные значения разностей соотв. элементов массивов

Автор: samec 15.11.2008 18:31

Цитата(volvo @ 15.11.2008 15:06) *

Если нигде не ошибся, то так: <...>

Спасибо, всё работает good.gif

Цитата(Lapp @ 15.11.2008 14:54) *

Мне, извини, проще нарисовать свои. С объяснением smile.gif. Надо?

буду рад видеть smile.gif