powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как изменить размер треугольника соблюдая симметрию
10 сообщений из 10, страница 1 из 1
как изменить размер треугольника соблюдая симметрию
    #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
как изменить размер треугольника соблюдая симметрию
    #39625859
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiT,
геометрические преобразования лучше делать через матрицы.
Почитайте про соотв. алгоритмы.
...
Рейтинг: 0 / 0
как изменить размер треугольника соблюдая симметрию
    #39625864
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiT'угол увеличен/уменьшен с сохранение симметрии'Или я что-то не понял, или углы тебе менять как раз не надо.
Тебе надо просто длины умножить на коэффициент подобия и перерасчитать на основании их новые координаты.
...
Рейтинг: 0 / 0
как изменить размер треугольника соблюдая симметрию
    #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
как изменить размер треугольника соблюдая симметрию
    #39626009
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7iгеометрические преобразования лучше делать через матрицы.
Почитайте про соотв. алгоритмы.

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

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

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

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

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


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