IPB

Здравствуйте, гость ( Вход | Регистрация )

> Алгоритмы и формулы
gamecreator
сообщение 02 Mar 2008, 17:08 (Сообщение отредактировал gamecreator - 02 Mar 2008, 21:08)
Сообщение #1

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




Выкладываем сюда сабж.

Формула для поиска координат вершины треугольника по координатам двух других и двум углам:

Получим координаты точек С1 и С2.

Отдельная благодарность МаКаКу за предоставленный материал и Нильсу Фабиану Хельге фон Коху за тему для размышлений.
Go to the top of the pageAdd Nick
 
+Quote Post
9 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 19)
izrukvruki
сообщение 04 Mar 2008, 17:25
Сообщение #2

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




Нужен алгоритм поиска площади следующей фигуры:

есть игра: есть зеленое прямоугольное поле и обочина - по ним ездят Комбайны (2) - они ничего не делают. никаких следов не оставляют, на обочине стоит Человек (1) - он может бегать по полю и "отсекать от него" куски, уменьшая площадь поля. Когда площадь уменьшится до некого числа - человек выигрывает и преходит на следующий уровень. Пока он бегает по полю - комбайн старается его задавить - если комбайн наедет на человека или на его СЛЕД (черным цветом отметил) то игра проиграна...

Думаю в эту игру многие играли на Спектрумах...

Вопрос вот в чем: как высчитать площадь зеленой фигуры (в общем виде - не конкретно в том в котором у меня изображено), после нескольких произвольных отсеканий (число отсеканий конечно)?

Go to the top of the pageAdd Nick
 
+Quote Post
Bourn
сообщение 04 Mar 2008, 18:29
Сообщение #3

Immortal
Сообщений: 2 415
Спасибо сказали: 60 раз




один из методов я могу предложить, так как поле - это картинка (допустим) а картинка состоит из набора пикселей - это просто двухмерный массив байт - текущая площадь = 1, отсеченная = 0 можно пробежаться по массиву и посчитать число 1 или 0


--------------------
Не лезь в дела Мудрых. Понять - не поймешь, а хлопот не оберешься.
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 04 Mar 2008, 21:17
Сообщение #4

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




а можно при каждом отсекании считать площадь отсеченной фигуры и отнимать.
а вообще если есть координаты вершин, то методом трапеций все легко считается.
Go to the top of the pageAdd Nick
 
+Quote Post
Azure
сообщение 05 Mar 2008, 12:58
Сообщение #5

status message not available
Сообщений: 224
Спасибо сказали: 1 раз




подобную задачу решали ( возможна решают еще ) програмисты ЧПУ.
немножко не такая, скажем выщитать оптимальный алгоритм по раскройке листа метала, трикотажного полотна с площадью в N, произвольной формы.
Гдето встречал подобные алгоритмы, на их основе развивали другие, подобные игровым. Даже примеры на канве под Борландоские дельфы/билдеры.

Поищи, погугли.
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 05 Mar 2008, 20:42 (Сообщение отредактировал Chrono Syndrome - 05 Mar 2008, 20:45)
Сообщение #6

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата
Думаю в эту игру многие играли на Спектрумах...

А я вот на PC в нее играла tongue.gif. Что насчет алогритма... Вместо двоичного массива, наверное, лучше использовать пиксели самого спрайта поля. Оставшуюся же площадь дейстивтельно удобнее считать через вычитание кол-ва убранных пикселей.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Bourn
сообщение 05 Mar 2008, 22:00 (Сообщение отредактировал Chrono Syndrome - 05 Mar 2008, 22:42)
Сообщение #7

Immortal
Сообщений: 2 415
Спасибо сказали: 60 раз




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


--------------------
Не лезь в дела Мудрых. Понять - не поймешь, а хлопот не оберешься.
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 05 Mar 2008, 22:43 (Сообщение отредактировал Chrono Syndrome - 05 Mar 2008, 22:45)
Сообщение #8

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




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

Ну да, но цветой код прозрачности по умолчанию все равно = 0.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 06 Mar 2008, 11:03
Сообщение #9

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




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

А как расчитывать площадь убранных пикселей?
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 06 Mar 2008, 16:03
Сообщение #10

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата
А как расчитывать площадь убранных пикселей?

Так кусок же прямоугольный убирается ?


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 06 Mar 2008, 17:14
Сообщение #11

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




Где сказано что прямоугольный??? Человек может бегать по ломанной - смотри правый верхний кусок - как будто это и есть единый оттяпанный кусок...
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 06 Mar 2008, 17:28 (Сообщение отредактировал Chrono Syndrome - 06 Mar 2008, 17:29)
Сообщение #12

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата(izrukvruki @ 06 Mar 2008, 18:14)
Где сказано что прямоугольный??? Человек может бегать по ломанной - смотри правый верхний кусок - как будто это и есть единый оттяпанный кусок...

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


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 06 Mar 2008, 17:45
Сообщение #13

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




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

Предположу что поле имеет размеры n*m
тогда движение человека по этому полю можно описать последовательностью
{(xi,yi)k| xi,yi принадлежат {-1,0,1} (идет против оси, не движется, идет по оси), |xi|+|yi|=1 (по диагонали не может ходить), k=1..n*m - количество движений}

далее я не могу ничего сообразить...
Go to the top of the pageAdd Nick
 
+Quote Post
Diplomat
сообщение 06 Mar 2008, 17:57 (Сообщение отредактировал Diplomat - 06 Mar 2008, 17:59)
Сообщение #14

Newbie
Сообщений: 21
Спасибо сказали: 0 раз




Подсчет пикселей не самый рациональный вариант: если детализация картинки-поля относительно велика, производительность упадет ниже уровня шумов.

1. Можно испольовать фейк: двухмерный массив с детализацией заведомо более низкой, чем детализация поля. Далее два пути его использования:
- либо по количеству отсеченных/оставшихся "клеток" массива, можно будет приблизительно определить количество отсеченных/оставшихся пикселей поля;
- либо отсекать части картинки-поля только по квадратам, соответствующим элементам-"клеткам" массива по принципу плиток или мозаики, и тогда количество отсеченных пикселей будет прямо пропорционально количеству отсеченных "клеток" массива.

2. Если нужна высокая точность, а игрок движется в произвольных направлениях, отсекая многоугольные области, можно записывать его траекторию в виде набора отрезков, воспринимать отсекаемую часть поля как многоугольник, и находить площадь этого многоугольника. Проблемы этого метода начнутся в случае, если игрок получит возможность пересекать собственную траекторию, проходя по своим следам.

P.S. Подсчет площади отсекаемого многоугольника методами прямоугольников и трапеций считаю нецелесообразным в случае, если отсекаемая фигура имеет сложную произвольную форму.
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 06 Mar 2008, 19:51 (Сообщение отредактировал Chrono Syndrome - 06 Mar 2008, 19:52)
Сообщение #15

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Вот, Oxid тут еще предложил разбиение фигуры отсечения на трегольники, но это, ИМХО, не лучший вариант. Лучше все-таки последовательно считать отсекаемые пиксели.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Darth_Beleg
сообщение 06 Mar 2008, 19:52 (Сообщение отредактировал Darth_Beleg - 06 Mar 2008, 19:54)
Сообщение #16

Undead elven necromancer
Сообщений: 195
Спасибо сказали: 15 раз




Подсчитать площадь для простого многоугольника (без самопересечений) просто, формула в enwiki: http://en.wikipedia.org/wiki/Polygon#Area_and_centroid
Для "сложного" многоугольника определить, что такое площадь, можно разными способами.


--------------------
Jesus saves... and takes half damage!
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 06 Mar 2008, 19:54
Сообщение #17

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата(Darth_Beleg @ 06 Mar 2008, 20:52)
Подсчитать площадь для простого многоугольника (без самопересечений) просто, формула в enwiki: http://en.wikipedia.org/wiki/Polygon#Area_and_centroid
Для "сложного" многоугольника определить, что такое площадь можно разными способами.

Его же потом еще закрасить придется smile.gif.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Darth_Beleg
сообщение 06 Mar 2008, 20:06
Сообщение #18

Undead elven necromancer
Сообщений: 195
Спасибо сказали: 15 раз




Кого закрасить?


--------------------
Jesus saves... and takes half damage!
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 06 Mar 2008, 21:36
Сообщение #19

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




Цитата(Diplomat @ 06 Mar 2008, 17:57)
Подсчет площади отсекаемого многоугольника методами прямоугольников и трапеций считаю нецелесообразным в случае, если отсекаемая фигура имеет сложную произвольную форму.

по-моему она совсем не сложную форму имеет, тем более что этот подсчет будет выполняться довольно редко. а координаты вершин можно получить если известны координаты игрока.
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 07 Mar 2008, 10:16
Сообщение #20

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата(Darth_Beleg @ 06 Mar 2008, 21:06)
Кого закрасить?

Многоугольник.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post

9 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 14 July 2025 - 17:13
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика