![]() |
программное рисование
как вычислить площадь программно нарисованной сложной фигуры ?
|
Это зависит от фигуры. Если фигура действительно сложная, то проще всего разбить ее (условно) на примитивы и сосчитать сумму их площадей. Встроенного вычисления площади во flash, насколько я знаю, нет.
|
Да.... это можно представить если фигура выпуклая .... хотя и с трудом.... а что если она таковой не является ?
|
2KorneKrabb
Цитата:
ты ж фигуру на плоскости рисуешь - вот и считай площадь плосого объекта - ГЕОМЕТРИЯ. или может ты имел в виду rectangle нарисованного объекта - тогда рисуй в новом мувике и смотри его высоту и ширину. или я действительно чего-то не понял. |
фигуре необязательно быть трехмерной чтобы называться выпуклой :)
в данном случае выпуклая фигура это некая фигура состоящая скажем из двух прямоугольников слепленных по сторонам а вогнутая это один прямоугольник из которого (булевой операцией) "выкушен" второй ( С-образная фигура ) причем по замыслу фигура рисуется не прямоугольниками а скорее всего через угловые точки... говоря грубым языком пользователь задает эти точки тем или иным образом, а программа проводит через них линии закрашивая контур . далее она должна вычислять ПЛОЩАДЬ фигуры |
Как как - с помощью интегралов. Если ты напишешь такой алгоритм то тебе дадут какую-нибудь премию. Лучше действительно с помощью циклов. Например находишь верхнюю,самую нижнюю, самую левую и самую правую точки объекта и спускаешься на одну точку вниз и проходишь цилом вправо, проверяя текущую точку на принадлежность к объекту. Только это лагать будет не слабо
|
Nucer я думаю то что в любом случае фигура будет состоять из N-ного количества прямоугольников это уже Плюс... дробить конечную фигуру на прямоугольники легко если она нарисована на листке бумаги перед носом.
а программно, опираясь лишь на координаты углов...... геммор... в юности я работал на Бейсике ( самой древней его версии ) я применял там этот метод ( попиксельная проверка картинки ) но не хочу снова прибегать к нему так как представляю сколько это будет занимать времени... может есть еще какие нибудь идеи ? |
Вложений: 1
Можно например так
|
ммм... а можно его [исходник] под Flash 6 сохранить ато он у меня не открывается....?... :)
|
у Nucerа классный исходник - мне понравилось, самому в голову такое не пришло, но это и есть та самая попиксельная проверка картинки.
posted by KorneKrabb Цитата:
|
Цитата:
|
Вложений: 1
сорри, не получилось.
попытка номер двас: файл в МХ |
Вложений: 1
Но лучше так. И дейтвительно, если у тебя фигура образована прямыми то вполне реально вычислить другим методом
|
Хороший алгоритм - фозьму на заметку (если ты не против) :)
|
Вложений: 1
Nucer, тестируему Celeronу потребовалось несколько секунд на то чтобы вычислить площадь (что огорчает)
представь сколько думал Бейсик ! :) но как я понял это единственный на данный момент реальный способ вычисления , но вот что я думаю . что если поделить фигуру на прямоугольники опустив из каждой точки проекции и получив при этом некое количество прямоугольников ( в том числе и не относящихся к фигуре). далее в каждом из них найти некую точку Z (точка с нбольшим отступом от угла прямоугольника ). и уже в этой точке проверить относиться ли он к фигуре или нет если да то прибавить его площадь к общей если нет игнорировать ? если слишком коряво объяснил смотрите рис. |
Вложений: 1
Насчёт нескольких секунд это ты загнул посмотри ещё вот это ( кстати в MX 2004 раз в десять (!) быстрее )
|
....в принципе то что я предлагаю это аналог попиксельной проверки hitTestoм заисключением того что проверяется не каждый пиксель а каждый прямоугольник образованный проекциями координат на оси...
это должно работать быстрее .... |
нарисовал квадрат 100x100, получил площадь 90000
учитывая, то, что чаще правильные фигуры рисуют с целыми значениями и в целых координатах, строку можно заменить на такую: if (MC.hitTest(j+.5, i+.5, true)) { что касается Цитата:
|
ну это сейчас секунду :)
а впроцессе игры при наличии еще кучи объектов будет тормозить сильнее а последние два файла у меня не открылись ( ну нету у меня Flash MX 2004 )))) )) |
Вложений: 1
Да BitSky прав. Кстати у меня ведь тоже можно задавать размер квадрата
|
Цитата:
|
Nucer от изменения шага (STEP) уменьшается точность !!!
|
Ну ясно дело уменьшается. Но не очень и сильно.
|
на счет проекций - честно сказать не знаю... пока не начал ....
но думаю что при рисовании пользователем фигуры - в массив будут заноситься координаты при поворотах.... потом будет происходит сортировка информации.... построение виртуальной сетки делящей фигуру на примитивы... сверение данных методом hitTesta... ...хм.. да наверное если пользователь попробует нарисовать стото слишком многоугольное это и займет ощутимое кол-во времени... но по самой задумке игры у него просто не будет на это времени :) |
А как будет происходить рисование? Юзер просто будет кликать в следующую точку?
|
....Nucer, пользователь будет управлять стрелками
попадая в определенную зону будет отчерчивать от нее куски которые и будут являться теми фигурами... одним словом была очень давно такая игра - Xonix меня всегда интересовал ее алгоритм.... кстати там будет еще один интересный момент - когда юзер будет начинать очерчивать область из одной точки поля а замыкать контур в другой - то программе нужно будет автоматически прочерчивать оставшуюся часть фигуры. |
| Часовой пояс GMT +4, время: 08:24. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.