Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.07;
Скачать: CL | DM;

Вниз

Разбиение на равные части   Найти похожие ветки 

 
D-Man   (2005-04-20 01:48) [0]

Такая задача:
Есть прямоугольник (или треугольник, если так проще), надо разбить его на заданое количество треугольников одинаковой площади.
Кто-нибудь знает как? Или где?


 
D-Man   (2005-04-20 02:11) [1]

Забыл, нужно чтобы треугольники могли получиться и в середине, т.е. просто поделить прямоугольник симетрично отрезками, проходящими через центр не пойдет. В идеале если еще добавить некоторый рандом, то каждый раз делиться должно в разных местах


 
XProger ©   (2005-04-20 02:36) [2]

"надо разбить его на заданое количество треугольников одинаковой площади."
Это не всегда возможно...


 
D-Man   (2005-04-20 08:03) [3]

Хотя бы примерный принцип?


 
boalse ©   (2005-04-20 08:38) [4]

Ну, понятно, что плошадь каждого треугольника будет находиться как общая плошадь/количество. Выбираем две любые стороны большого треугольника, на них будут лежать две стороны первого маленького, причём так, что одна из выбранных сторон большого=одной из сторон маленькой. Таким образом нам во первых известна площадь первого искомого треугольника, во вторых одна из его сторон, в третьих можно найти угол между двумя выбранными нами сторонами, по сути один из углов искомого треугольника. По этим трём параметрам мы вполне можем найти третью сторону, только я фомулу не знаю, не задумывался. Теперь нам известен первый треугольник. Дальше всё похоже. Выбираем найденную нами сторону первого треугольника и ту сторону большого треугольника, которую мы не выбрали прошлый раз. Опять нам известна площадь, одна сторона и один из углов между сторонами искомого треугольника. Находим третью сторону. Далее опять тоже самое. Берём только что найденную сторону и сторону большого, только ту которую мы брали первый раз (в дальнейшем берём по очереди то одну то другую сторону). В конце концов таким образом можно разбить ЛЮБОЙ треугольник.


 
boalse ©   (2005-04-20 08:56) [5]

А разбить прямоугольник на одинаковые треугольники таким методом ещё проще.
Если количество треугольников чётное:
Сначала выбираем одну из сторон и строим от неё N штук перпендикуляров через равное расстояние, по сути делим прямоугольник на N+1 маленьких одинаковых прямоугольников, где N=(КоличествоТреугольников/2)-1. Теперь просто проводим диагонали в построенных прямоугольниках.

Если количество треугольников нечётное:
Разбиваем на два треугольника и  делаем в каждом из них по схеме boalse ©   (20.04.05 08:38) [4]


 
D-Man   (2005-04-20 11:37) [6]

Это все симметрично, даже рандома не добавишь. Я пытаюсь сделать так чтобы могли получаться треугольники любой формы и в любом месте, но площадь сохранялась, т.е чтобы порядка там никакого небыло (казалось что нет).

Допустим я могу нарисовать треугольник случайной формы, но заданной площади, проблема теперь в том, что когда я начинаю заполнять ими прямоугольник, приставляя один к другому по общим сторонам, я могу зайти в тупик или могу создать области с меньшей площадью или например при вставке последнего треугольника может оказаться, что область для него не треугольная, как этого избежать незнаю.

Кстати, если кто играл в Космических Рейнджеров, то видел там карту космоса, она как раз строится случайно. Прямоугольник делится на заданное кол-во полигонов, что помоему можно получить из деления на треугольники. Площадь у них там правда вариируется в заданных пределах. Сделали же как-то люди? Спросить бы у них... но они же не скажут :(


 
boalse ©   (2005-04-20 12:06) [7]

Может тогда взять прямоугольник, разрезать его на ЛЮБОЕ количетво треугольников, сколько получиться, главное с одинаковой площадью. Затем каждый из получившихся треугольников разбить на N частей по указанной выше схеме схеме. N=(ТребуемоеКоличество/КоличествоПолучившихся), если будет остаток, то тогда один какой-нибудь треугольник разбить не на N, а на N+1 частей.


 
D-Man   (2005-04-20 14:31) [8]

Но опять же форма у них помоему будет одинаковая



Страницы: 1 вся ветка

Текущий архив: 2005.08.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.037 c
1-1121867379
Dust
2005-07-20 17:49
2005.08.07
Опять вопрос про качественный код:


14-1120578423
NewWonder
2005-07-05 19:47
2005.08.07
Сделал курсовик и ...


1-1121827337
-=snoop=-
2005-07-20 06:42
2005.08.07
перебор объектов TCheckBox на форме


9-1113835930
_sHaDe_
2005-04-18 18:52
2005.08.07
Полёт пули(GLScene)


8-1112180858
seregka
2005-03-30 15:07
2005.08.07
Прокрутка изображения