Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

Масштабирование   Найти похожие ветки 

 
Death2   (2004-02-07 05:36) [0]

Здравствуйте.
Помогите пожалуйста написать функцию масштабирования многоугольника. Многоугольник представлен ввиде массива точек. Функция на входе получает коэффициент масштабирования и многоугольник.
Type
TPoligon = class
public
FNamberOfPoints : integer;
FPoints : array[0..100] of Tpoint;
end;
function MashtabPoligon(ACoef : real; APoligon : TPoligon) : boolean;
begin
//???
end;


 
TUser ©   (2004-02-07 10:19) [1]

Преобразовать координаты так, чтобы одна из точек попала в (0,0). Ее координаты менять не будем. Остальные координаты (ну, собственно, все) - умножаем на полученный коэффиц.


 
Никто   (2004-02-07 11:07) [2]

function MashtabPolygon(ACoef : real; APolygon : TPolygon) : boolean;
const
BasePointIndex = 0;
begin
for i := 0 to FNumberOfPoints - 1 do
if (i <> BasePointIndex) then // хотя можно и без этого условия
with FPolygon do
begin
FPoints[i].X := round((FPoints[i].X - FPoints[BasePointIndex].X) * ACoef) + FPoints[BasePointIndex].X;
FPoints[i].Y := round((FPoints[i].Y - FPoints[BasePointIndex].Y) * ACoef) + FPoints[BasePointIndex].Y;
end;
end;

P.S. Я не знаю всех условий Вашей задачи, но, в общем случае, лучше использовать не статический массив точек ([0..100]), а динамический ([0..0]) с выделением памяти по мере необходимости. Однако, в таком случае необходимо отключить контроль выхода за границы ({$RANGECHECKS OFF}), а так же проявить некоторую долю осторожности при отладке кода.

P.P.S. В качестве параметра FPolygon передавайте не значение, а ссылку ^TPolygon.

P.P.P.S. Масштаб - Scale (англ.)

P.P.P.P.S. Извините, если мои комментарии Вас напрягли :o)


 
Death2   (2004-02-10 08:12) [3]

Нет, абсолютно не напрягли!
Спасибо большое!

Вот только, APolygon и так уже является ссылкой, т.к. в делфи все экземпляры класса - ссылки(указатели).



Страницы: 1 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.02 c
4-80365
zdn
2003-12-17 13:14
2004.02.25
Подключение к запущенному процесус


14-80092
Ega23
2004-02-03 14:01
2004.02.25
Посоветуйте программу


3-79649
Vitalik
2004-01-31 14:51
2004.02.25
Изменение значения через DbGrid


14-80162
димка
2004-02-01 14:09
2004.02.25
перват нажатия клавиш


14-80200
Emik
2004-02-05 17:35
2004.02.25
Установка компонентов