![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| YURIC |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 5.8.2003 Репутация: нет Всего: 1 |
Подскажите товарисчи как построить параллельный треугольник?
Для примера покажу картинку: ![]() Нужно найти координаты точек с вопросиками. Подскажите как? Пожалуйста. P/S/ Нарисовал как мог, треугольники должны быть параллельными, расстояние на которое нужно расширить треугольник известно. Добавлено @ 14:22 http://softwill.com.ru/treug.gif Это сообщение отредактировал(а) YURIC - 20.10.2005, 14:20 |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 4 Всего: 110 |
первое, что приходит в голову:
1. выбираем одну сторону 2. пишем для нее уравнение прямой 3. сдвигаем прямую на необходимое расстояние 4. проделываем то же самое для двух других сторон, получаем 3 прямых 5. находим точки их попарных пересечений - их будет 3 это и будут точки треугольника -------------------- qqq |
|||
|
||||
| YURIC |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 5.8.2003 Репутация: нет Всего: 1 |
maxim1000
Блин, это классно конечно, а можно пример? |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 4 Всего: 110 |
ага... или второй вариант:
1. берем точку 2. выбираем любое ребро, которое из нее выходит 3. выбираем перпендикулярное ему направление - в сторону "от треугольника" 4. сдвигаем ее на заданное расстояние 5. смотрим на другую сторону, пишем ее уравнение прямой 6. начинаем сдвигать точку параллельно первой стороне пока, она не окажется на заданном расстоянии от прямой второй стороны 7. повторяем эту процедуру для двух других точек... Добавлено @ 14:31 так... вот третий вариант и он последний... для каждой точки записываем два уравнения: 1. находится на нужном расстоянии от прямой одной стороны 2. находится на нужном расстоянии от прямой второй стороны решаем, получаем ее координаты, так для каждой из трех фуух... ну и флудер я а пример сейчас для третьего варианта будет... -------------------- qqq |
|||
|
||||
| YURIC |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 5.8.2003 Репутация: нет Всего: 1 |
maxim1000
ага, у тебя получается писать быстрее, чем у меня читать |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 4 Всего: 110 |
так... пример будет позже, ибо работа...
-------------------- qqq |
|||
|
||||
| YURIC |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 5.8.2003 Репутация: нет Всего: 1 |
maxim1000
Я подожду |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 1 Всего: 360 |
Поищи матрицу для проекции. на неё потом каждую точку умножишь и будут новые координаты.
Добавлено @ 15:06 В мат. справочнике. У меня просто под рукой нет сейчас. |
|||
|
||||
| YURIC |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 5.8.2003 Репутация: нет Всего: 1 |
sergej.z
Вот и уменя тоже нет... Поэтому и прошу помощи. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 4 Всего: 110 |
хм... все-таки не удержался и придумал четвертый
этак меня и забанить могут за флейм задача такая: добавить по очереди три полоски (трапеции) к треугольнику после каждого добавления треугольник будет расширяться в нужную нам сторону например, добавляем полоску к стороне BC: полученный треугольник будет подобен исходному, верщины A и A' будут совпадать потому новые вершины можно будет найти так: B'=A+k*(B-A) C'=A+k*(C-A) k - коэффициент подобия его вычисление: мы точно знаем, что высота, опущенная с точки A, должна увеличиться на d (заданное расстояние), с другой стороны она должна увеличиться в k раз (т.к. подобие) вот и получаем: k=(hA+d)/hA где, hA - длина высоты из A на BC в исходном треугольнике... вычислить ее можно, как угодно, например, по всяким косинусам-синусам или по площади... если что - спрашивай... Это сообщение отредактировал(а) maxim1000 - 20.10.2005, 15:21 -------------------- qqq |
|||
|
||||
| YURIC |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 5.8.2003 Репутация: нет Всего: 1 |
мож по аське? |
|||
|
||||
| YURIC |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 5.8.2003 Репутация: нет Всего: 1 |
|
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 4 Всего: 110 |
нету у меня аськи высота, на самом деле вычисяется довольно просто есть две формулы площади треугольника: 1. s=BC*hA/2 2. s=sqrt(p*(p-a)*(p-b)*(p-c)), где p=(a+b+c)/2 вчитаем площадь по второй формуле, подставляем в первую, находим высоту... -------------------- qqq |
|||
|
||||
| YURIC |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 5.8.2003 Репутация: нет Всего: 1 |
|
|||
|
||||
| sergejzr |
|
||||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 1 Всего: 360 |
Треугольник задан точками:
P1(x1,y1); P2(x2,y2); P3(x3,y3) Задан фактор расширения fx, fy; (Соответственно по x и y) Составляем матрицу для скалирования:
Находим геометрический центр треугольника Pc1: xc1=(x1+x2+x3)/3; yc1=(y1+y2+y3)/3; Получили: Pc1(xc1,yc1); Скалируем центр и получаем центр большого треугольника Pc2(естесственно сдвинутый). Pc2 = S1 x Pc1 Получаем:Pc2(хc2,xc2); Находим разницу dX=(xc2-xc1) dY=(yc2-yc1) Подставляем разницу в нашу матрицу (она теперь будет сдвигать большой треугольник нa маленький)
Умножем матрицу S2 нс каждую из точек и получаем новые проавильные координаты точек. Всё
PS: Возможно надо будет сперва транслировать всю фигуру в положительный квадрант координат(из за знаков +/-). Хотя по идее должно работать везде. Не охота доказательств искать. На практике просто замерь.. PPS: Во только от деления к сож. не удалось избавится.. Но думаю, это и невозможно... Что скажете? |
||||||
|
|||||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |