Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.04 c
6-1114019313
Jetus
2005-04-20 21:48
2005.08.07
Блокировка файла от удаления по FTP


4-1118150718
Юрий Ж.
2005-06-07 17:25
2005.08.07
Пульт ДУ + ИК-порт


1-1121405141
Анастасия
2005-07-15 09:25
2005.08.07
Перетаскивание текста между формами


4-1118140335
Андрей Жук
2005-06-07 14:32
2005.08.07
Функция, обратная wsprintf


14-1121285810
Vudu
2005-07-14 00:16
2005.08.07
Как пользоваться инсталятором?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский