Форум: "Основная";
Текущий архив: 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.03 c