![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
Выкладываем сюда сабж.
Формула для поиска координат вершины треугольника по координатам двух других и двум углам: Получим координаты точек С1 и С2. Отдельная благодарность МаКаКу за предоставленный материал и Нильсу Фабиану Хельге фон Коху за тему для размышлений. |
|
|
![]() |
![]()
Сообщение
#2
|
|
![]() Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз ![]() |
Нужен алгоритм поиска площади следующей фигуры:
есть игра: есть зеленое прямоугольное поле и обочина - по ним ездят Комбайны (2) - они ничего не делают. никаких следов не оставляют, на обочине стоит Человек (1) - он может бегать по полю и "отсекать от него" куски, уменьшая площадь поля. Когда площадь уменьшится до некого числа - человек выигрывает и преходит на следующий уровень. Пока он бегает по полю - комбайн старается его задавить - если комбайн наедет на человека или на его СЛЕД (черным цветом отметил) то игра проиграна... Думаю в эту игру многие играли на Спектрумах... Вопрос вот в чем: как высчитать площадь зеленой фигуры (в общем виде - не конкретно в том в котором у меня изображено), после нескольких произвольных отсеканий (число отсеканий конечно)? ![]() |
|
|
![]()
Сообщение
#3
|
|
![]() Immortal Сообщений: 2 415 Спасибо сказали: 60 раз ![]() |
один из методов я могу предложить, так как поле - это картинка (допустим) а картинка состоит из набора пикселей - это просто двухмерный массив байт - текущая площадь = 1, отсеченная = 0 можно пробежаться по массиву и посчитать число 1 или 0
-------------------- |
|
|
![]()
Сообщение
#4
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
а можно при каждом отсекании считать площадь отсеченной фигуры и отнимать.
а вообще если есть координаты вершин, то методом трапеций все легко считается. |
|
|
![]()
Сообщение
#5
|
|
status message not available Сообщений: 224 Спасибо сказали: 1 раз ![]() |
подобную задачу решали ( возможна решают еще ) програмисты ЧПУ.
немножко не такая, скажем выщитать оптимальный алгоритм по раскройке листа метала, трикотажного полотна с площадью в N, произвольной формы. Гдето встречал подобные алгоритмы, на их основе развивали другие, подобные игровым. Даже примеры на канве под Борландоские дельфы/билдеры. Поищи, погугли. |
|
|
![]()
Сообщение
#6
|
|
![]() •●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5936 раз ![]() |
Цитата Думаю в эту игру многие играли на Спектрумах... А я вот на PC в нее играла ![]() -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
![]()
Сообщение
#7
|
|
![]() Immortal Сообщений: 2 415 Спасибо сказали: 60 раз ![]() |
пиксели поля по разному могут кодироваться, при различных видеорежимах , а с массивом проще...
-------------------- |
|
|
![]()
Сообщение
#8
|
|
![]() •●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5936 раз ![]() |
Цитата пиксели поля по разному могут кодироваться, при различных видеорежимах , а с массивом проще... Ну да, но цветой код прозрачности по умолчанию все равно = 0. -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
![]()
Сообщение
#9
|
|
![]() Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз ![]() |
Да вычисление площади нужно для того чтоб определить какой кусок после разрезания исчезнет (пропадает кусок меньший по площади)...
А как расчитывать площадь убранных пикселей? |
|
|
![]()
Сообщение
#10
|
|
![]() •●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5936 раз ![]() |
Цитата А как расчитывать площадь убранных пикселей? Так кусок же прямоугольный убирается ? -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
![]()
Сообщение
#11
|
|
![]() Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз ![]() |
Где сказано что прямоугольный??? Человек может бегать по ломанной - смотри правый верхний кусок - как будто это и есть единый оттяпанный кусок...
|
|
|
![]()
Сообщение
#12
|
|
![]() •●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5936 раз ![]() |
Цитата(izrukvruki @ 06 Mar 2008, 18:14) Где сказано что прямоугольный??? Человек может бегать по ломанной - смотри правый верхний кусок - как будто это и есть единый оттяпанный кусок... Ну на каринке-то как раз прямоугольный кусок и виден... А так: площадь будет равна числу вырезанных (ну, приведенных к прозрачности) пикселей. Надо понимать, что твой следующий вопрос будет уже о алгоритме этого самого вырезания, верно) ? -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
![]()
Сообщение
#13
|
|
![]() Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз ![]() |
Мне нужен математический алгоритм в соответствии с которым я смогу "зацепиться" за площадь...
Предположу что поле имеет размеры n*m тогда движение человека по этому полю можно описать последовательностью {(xi,yi)k| xi,yi принадлежат {-1,0,1} (идет против оси, не движется, идет по оси), |xi|+|yi|=1 (по диагонали не может ходить), k=1..n*m - количество движений} далее я не могу ничего сообразить... |
|
|
![]()
Сообщение
#14
|
|
Newbie Сообщений: 21 Спасибо сказали: 0 раз ![]() |
Подсчет пикселей не самый рациональный вариант: если детализация картинки-поля относительно велика, производительность упадет ниже уровня шумов.
1. Можно испольовать фейк: двухмерный массив с детализацией заведомо более низкой, чем детализация поля. Далее два пути его использования: - либо по количеству отсеченных/оставшихся "клеток" массива, можно будет приблизительно определить количество отсеченных/оставшихся пикселей поля; - либо отсекать части картинки-поля только по квадратам, соответствующим элементам-"клеткам" массива по принципу плиток или мозаики, и тогда количество отсеченных пикселей будет прямо пропорционально количеству отсеченных "клеток" массива. 2. Если нужна высокая точность, а игрок движется в произвольных направлениях, отсекая многоугольные области, можно записывать его траекторию в виде набора отрезков, воспринимать отсекаемую часть поля как многоугольник, и находить площадь этого многоугольника. Проблемы этого метода начнутся в случае, если игрок получит возможность пересекать собственную траекторию, проходя по своим следам. P.S. Подсчет площади отсекаемого многоугольника методами прямоугольников и трапеций считаю нецелесообразным в случае, если отсекаемая фигура имеет сложную произвольную форму. |
|
|
![]()
Сообщение
#15
|
|
![]() •●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5936 раз ![]() |
Вот, Oxid тут еще предложил разбиение фигуры отсечения на трегольники, но это, ИМХО, не лучший вариант. Лучше все-таки последовательно считать отсекаемые пиксели.
-------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
![]()
Сообщение
#16
|
|
![]() Undead elven necromancer Сообщений: 195 Спасибо сказали: 15 раз ![]() |
Подсчитать площадь для простого многоугольника (без самопересечений) просто, формула в enwiki: http://en.wikipedia.org/wiki/Polygon#Area_and_centroid
Для "сложного" многоугольника определить, что такое площадь, можно разными способами. -------------------- Jesus saves... and takes half damage!
|
|
|
![]()
Сообщение
#17
|
|
![]() •●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5936 раз ![]() |
Цитата(Darth_Beleg @ 06 Mar 2008, 20:52) Подсчитать площадь для простого многоугольника (без самопересечений) просто, формула в enwiki: http://en.wikipedia.org/wiki/Polygon#Area_and_centroid Для "сложного" многоугольника определить, что такое площадь можно разными способами. Его же потом еще закрасить придется ![]() -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
![]()
Сообщение
#18
|
|
![]() Undead elven necromancer Сообщений: 195 Спасибо сказали: 15 раз ![]() |
Кого закрасить?
-------------------- Jesus saves... and takes half damage!
|
|
|
![]()
Сообщение
#19
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
Цитата(Diplomat @ 06 Mar 2008, 17:57) Подсчет площади отсекаемого многоугольника методами прямоугольников и трапеций считаю нецелесообразным в случае, если отсекаемая фигура имеет сложную произвольную форму. по-моему она совсем не сложную форму имеет, тем более что этот подсчет будет выполняться довольно редко. а координаты вершин можно получить если известны координаты игрока. |
|
|
![]()
Сообщение
#20
|
|
![]() •●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5936 раз ![]() |
Цитата(Darth_Beleg @ 06 Mar 2008, 21:06) Кого закрасить? Многоугольник. -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 14 July 2025 - 17:13 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|