Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Масштабирование плоских фигур, Масштабирование плоских фигур 
:(
    Опции темы
mrVerus
Дата 25.11.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 10.3.2009

Репутация: нет
Всего: нет



Суть проблемы такая, как масштабировать фигуру состоящая из простых линии7
PM MAIL   Вверх
Snowy
Дата 25.11.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Координаты всех точек умножить на коэффициэнт масштаба.
PM MAIL   Вверх
mrVerus
Дата 25.11.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 10.3.2009

Репутация: нет
Всего: нет



приведи пример
PM MAIL   Вверх
Snowy
Дата 25.11.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Привожу пример:
Есть фигура (треугольник), с углами (1, 1), (3, 2), (5, 1)
Увеличиваем её в 3 раза - получаем (3, 3), (9, 6), (15, 3)
Треугольник стал в 3 раза больше.

Более конкретный пример зависит от того, что именно тебе нужно.
То есть приведи такие параметры, как "Дано" и "Нужно получить".
PM MAIL   Вверх
mrVerus
Дата 26.11.2009, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 10.3.2009

Репутация: нет
Всего: нет



А как осуществить вращение
PM MAIL   Вверх
Snowy
Дата 26.11.2009, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Поворот делается по формуле:
X = Xc + (X-Xc) * Cos(a) + (Y-Yc) * Sin(a)
Y = Yc + (X-Xc) * Sin(a) - (Y-Yc) * Cos(a)
где Xc и Yc - координаты точки, вокруг которой вращаем, а - угол

Код
procedure Scale(a: array of TPoint; scale: real; var NewArray: array of TPoint);
{* Масштабируем исходную фигуру a на scale *}
var
  i: integer;
begin
  for i := 0 to Length(a) - 1 do
  begin
    NewArray[i].X := Round(a[i].X * scale);
    NewArray[i].Y := Round(a[i].Y * scale);
  end;
end;

procedure Rotate(a: array of TPoint; Anger: Real; Center: TPoint;
                 var NewArray: array of TPoint);
{* Поворачиваем исходную фигуру a на Anger радиан, относительно центра Center *}
var
  i: integer;
begin
  for i := 0 to Length(a) - 1 do
  begin
    NewArray[i].X := Center.X + Round((a[i].X - Center.X) * Cos(Anger) +
                                      (a[i].Y - Center.Y) * Sin(Anger));
    NewArray[i].Y := Center.Y + Round((a[i].X - Center.X) * Sin(Anger) -
                                      (a[i].Y - Center.Y) * Cos(Anger));
    Form2.m1.Lines.Add(IntToStr(NewArray[i].X) + ':' + IntToStr(NewArray[i].Y));
  end;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  a, b: array of TPoint;
  p: TPoint;
begin
  SetLength(a, 4);
  SetLength(b, Length(a));
  a[0] := Point(50, 50);
  a[1] := Point(200, 100);
  a[2] := Point(70, 200);
  a[3] := Point(50, 100);
  Canvas.Pen.Color := clNavy;
  Canvas.Polyline(a); // рисуем исходную закорюку синим
  Scale(a, 0.5, b); // Уменьшаем в 2 раза
  Canvas.Pen.Color := clPurple;
  Canvas.Polyline(b); // рисуем уменьшеную закорюку фиолетовым
  Scale(a, 2, b); // Увеличиваем в 2 раза
  Canvas.Pen.Color := clGreen;
  Canvas.Polyline(b); // Рисуем увеличенную закорюку зелёным

  Rotate(a, pi / 4, Point(100, 100), b); // поворачиваем на Пи/4 (45 градусов)
  Canvas.Pen.Color := clRed;
  Canvas.Polyline(b); // Рисуем повёрнутую закорюку красным
end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.