Главная страница
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.019 c
1-79930
Mr. Chel
2004-02-09 18:36
2004.02.25
Отработка событий на границе компонентов.


1-79716
DimaK
2004-02-12 17:24
2004.02.25
RichEdit + колесо мыши


8-80026
Sniper--Max
2003-10-23 06:56
2004.02.25
Как нажать на кнопку под моей формой?


3-79586
SnapIn
2004-01-25 21:53
2004.02.25
MSSQL и ADO - Отображение значения Lookup-поля


1-79955
Alex
2004-02-13 19:02
2004.02.25
HELP!