Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как изменить размер треугольника соблюдая симметрию / 10 сообщений из 10, страница 1 из 1
05.04.2018, 08:18
    #39625856
AndreiT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить размер треугольника соблюдая симметрию
есть треугольник

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var
pol: array[1..3] of TPoint; // координаты точек треугольника
...
pol[1].x := 10;// ЧТО ВЫЧИСТЬ/ПРИбАВИТЬ К КООРДИНАТАМ
pol[1].y := 50;
pol[2].x := 40;
pol[2].y := 10;
pol[3].x := 70;
pol[3].y := 50;

canvas.Brush.Color:=clGreen;

Canvas.Polygon(pol);


что нужно сделать чтоб уменьшился/увеличился треугольник с выполнением условия (угол равен углу после уменьшения/увеличения)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
// вычислим длины сторон до изменения
ab:=sqrt(sqr(x2pol-x1pol)+sqr(y2pol-y1pol));
ac:=sqrt(sqr(x3pol-x1pol)+sqr(y3pol-y1pol));
bc:=sqrt(sqr(x3pol-x2pol)+sqr(y3pol-y2pol));
// вычислим угол
ugol1:=(sqr(ab)+sqr(ac)-sqr(bc))/(2*ab*ac);
ugol1:=arccos(ugol1);
ugol1:=ugol1*(180/pi);
ugol1:=round(ugol1);
....
уменьшение увеличение угла(КАК?)
....
// вычислим длины сторон после изменения
ab:=sqrt(sqr(x2pol-x1pol)+sqr(y2pol-y1pol));
ac:=sqrt(sqr(x3pol-x1pol)+sqr(y3pol-y1pol));
bc:=sqrt(sqr(x3pol-x2pol)+sqr(y3pol-y2pol));
// вычислим угол
ugol2:=(sqr(ab)+sqr(ac)-sqr(bc))/(2*ab*ac);
ugol2:=arccos(ugol2);
ugol2:=ugol2*(180/pi);
ugol2:=round(ugol2);

if ugol1=ugol2 then showmessage('угол увеличен/уменьшен с сохранение симметрии');



Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
05.04.2018, 08:42
    #39625859
d7i
d7i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить размер треугольника соблюдая симметрию
AndreiT,
геометрические преобразования лучше делать через матрицы.
Почитайте про соотв. алгоритмы.
...
Рейтинг: 0 / 0
05.04.2018, 08:49
    #39625864
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить размер треугольника соблюдая симметрию
AndreiT'угол увеличен/уменьшен с сохранение симметрии'Или я что-то не понял, или углы тебе менять как раз не надо.
Тебе надо просто длины умножить на коэффициент подобия и перерасчитать на основании их новые координаты.
...
Рейтинг: 0 / 0
05.04.2018, 09:10
    #39625878
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить размер треугольника соблюдая симметрию
AndreiTчто нужно сделать чтоб уменьшился/увеличился треугольник с выполнением условия (угол равен углу после уменьшения/увеличения)
Лично я в студенческие годы действовал бы примерно так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure Resize(var x1, y1, x2, y2, x3, y3: double; K: double);
var x0, y0: double;
begin
  x0 := (x1 + x2 + x3) / 3;
  y0 := (y1 + y2 + y3) / 3;
  x1 := x0 + k * (x1 - x0);
  x2 := x0 + k * (x2 - x0);
  x3 := x0 + k * (x3 - x0);
  y1 := y0 + k * (y1 - y0);
  y2 := y0 + k * (y2 - y0);
  y3 := y0 + k * (y3 - y0);
end;



Выбор x0/y0, в общем-то, непринципиален, с тем же успехом можно заполнять их хоть рандомом. Просто так будет красивее смотреться, если анимировать изменение треугольника, плавно меняя k.
...
Рейтинг: 0 / 0
05.04.2018, 11:56
    #39626009
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить размер треугольника соблюдая симметрию
d7iгеометрические преобразования лучше делать через матрицы.
Почитайте про соотв. алгоритмы.

А лучше - весь курс линейной алгебры.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.04.2018, 18:00
    #39626305
AndreiT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить размер треугольника соблюдая симметрию
вот исходник.. там две кнопки увеличить уменьшить треугольник.. как это сделать чтоб при увеличении уменьшении треугольника сохранялся угол.. т.е. при изменении треугольника пропорции и угол оставались неизменными
..

заранее спасибо, если напишите в исходнике
...
Рейтинг: 0 / 0
05.04.2018, 18:05
    #39626312
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить размер треугольника соблюдая симметрию
AndreiTкак это сделать чтоб при увеличении уменьшении треугольника сохранялся угол.

Вообще-то как раз изменение угла - задача нетривиальная, а для простого
увеличения-уменьшения матрица тривиальна.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.04.2018, 19:04
    #39626986
AndreiT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить размер треугольника соблюдая симметрию
1. Провожу параллельные линии граням треугольника
2. Нахожу точки пересечения линий
3. Задаю координаты найденными точками пересечения

теперь осталось это все записать программно
...
Рейтинг: 0 / 0
07.04.2018, 07:16
    #39627082
MBo
MBo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить размер треугольника соблюдая симметрию
AndreiT,

Вы способны применить то, что softwarer прописал?
...
Рейтинг: 0 / 0
07.04.2018, 10:26
    #39627101
DesWind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как изменить размер треугольника соблюдая симметрию
AndreiT,
Вообще-то, нада сначала на бумажке решить математически, и тогда записать это в программе не составит труда.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как изменить размер треугольника соблюдая симметрию / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]