Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.44 MB
Время: 0.039 c
4-80347
Kinder
2003-12-16 20:21
2004.02.25
Выдираем из файла определённую иконку


3-79582
Максим
2004-01-29 09:50
2004.02.25
Подключение к базе данных в реальном времени


3-79636
gedd
2004-01-31 18:08
2004.02.25
Разделение полей в тектовой базе


14-80247
cyborg
2004-02-03 21:05
2004.02.25
Регистрация


6-80055
SPeller
2003-12-19 10:39
2004.02.25
Как работать по HTTP протоколу с интернетом через прокси?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский