Просмотр полной версии : программное рисование
KorneKrabb
15.04.2004, 14:08
как вычислить площадь программно нарисованной сложной фигуры ?
Это зависит от фигуры. Если фигура действительно сложная, то проще всего разбить ее (условно) на примитивы и сосчитать сумму их площадей. Встроенного вычисления площади во flash, насколько я знаю, нет.
KorneKrabb
15.04.2004, 14:44
Да.... это можно представить если фигура выпуклая .... хотя и с трудом.... а что если она таковой не является ?
FreeLander
15.04.2004, 15:23
это можно представить если фигура выпуклая .... хотя и с трудом.... а что если она таковой не является ?
причём тут выпуклость?
ты ж фигуру на плоскости рисуешь - вот и считай площадь плосого объекта - ГЕОМЕТРИЯ.
или может ты имел в виду rectangle нарисованного объекта - тогда рисуй в новом мувике и смотри его высоту и ширину.
или я действительно чего-то не понял.
KorneKrabb
15.04.2004, 16:21
фигуре необязательно быть трехмерной чтобы называться выпуклой :)
в данном случае выпуклая фигура это некая фигура состоящая скажем из двух прямоугольников слепленных по сторонам
а вогнутая это один прямоугольник из которого (булевой операцией) "выкушен" второй ( С-образная фигура )
причем по замыслу фигура рисуется не прямоугольниками а скорее всего через угловые точки...
говоря грубым языком пользователь задает эти точки тем или иным образом, а программа проводит через них линии закрашивая контур . далее она должна вычислять ПЛОЩАДЬ фигуры
Как как - с помощью интегралов. Если ты напишешь такой алгоритм то тебе дадут какую-нибудь премию. Лучше действительно с помощью циклов. Например находишь верхнюю,самую нижнюю, самую левую и самую правую точки объекта и спускаешься на одну точку вниз и проходишь цилом вправо, проверяя текущую точку на принадлежность к объекту. Только это лагать будет не слабо
KorneKrabb
15.04.2004, 17:12
Nucer я думаю то что в любом случае фигура будет состоять из N-ного количества прямоугольников это уже Плюс... дробить конечную фигуру на прямоугольники легко если она нарисована на листке бумаги перед носом.
а программно, опираясь лишь на координаты углов...... геммор...
в юности я работал на Бейсике ( самой древней его версии )
я применял там этот метод ( попиксельная проверка картинки ) но не хочу снова прибегать к нему так как представляю сколько это будет занимать времени...
может есть еще какие нибудь идеи ?
KorneKrabb
15.04.2004, 17:33
ммм... а можно его [исходник] под Flash 6 сохранить ато он у меня не открывается....?... :)
FreeLander
15.04.2004, 17:39
у Nucerа классный исходник - мне понравилось, самому в голову такое не пришло, но это и есть та самая попиксельная проверка картинки.
posted by KorneKrabb
может есть еще какие нибудь идеи ?
думаю быстрее всего будет как раз таки программно по координатам углов, а геморрой это только в первый раз, я для себя такие задачи квалифицирую как полезные - позволяют немного тригонометрию вспомнить.
FreeLander
15.04.2004, 17:47
а можно его [исходник] под Flash 6 сохранить ато он у меня не открывается....?...
FreeLander
15.04.2004, 17:49
сорри, не получилось.
попытка номер двас: файл в МХ
Но лучше так. И дейтвительно, если у тебя фигура образована прямыми то вполне реально вычислить другим методом
Хороший алгоритм - фозьму на заметку (если ты не против) :)
KorneKrabb
15.04.2004, 18:23
Nucer, тестируему Celeronу потребовалось несколько секунд на то чтобы вычислить площадь (что огорчает)
представь сколько думал Бейсик ! :)
но как я понял это единственный на данный момент реальный способ вычисления , но вот что я думаю . что если поделить фигуру на прямоугольники опустив из каждой точки проекции и получив при этом некое количество прямоугольников ( в том числе и не относящихся к фигуре).
далее в каждом из них найти некую точку Z (точка с нбольшим отступом от угла прямоугольника ). и уже в этой точке проверить относиться ли он к фигуре или нет
если да то прибавить его площадь к общей если нет игнорировать ?
если слишком коряво объяснил смотрите рис.
Насчёт нескольких секунд это ты загнул посмотри ещё вот это ( кстати в MX 2004 раз в десять (!) быстрее )
KorneKrabb
15.04.2004, 18:48
....в принципе то что я предлагаю это аналог попиксельной проверки hitTestoм заисключением того что проверяется не каждый пиксель а каждый прямоугольник образованный проекциями координат на оси...
это должно работать быстрее ....
нарисовал квадрат 100x100, получил площадь 90000
учитывая, то, что чаще правильные фигуры рисуют с целыми значениями и в целых координатах, строку можно заменить на такую:
if (MC.hitTest(j+.5, i+.5, true)) {
что касается // работает только при условии, что верхний левый угол фигуры находиться в точке 0x0 то это исправимо с помощью getBounds.
KorneKrabb
15.04.2004, 18:51
ну это сейчас секунду :)
а впроцессе игры при наличии еще кучи объектов будет тормозить сильнее
а последние два файла у меня не открылись ( ну нету у меня Flash MX 2004 )))) ))
Да BitSky прав. Кстати у меня ведь тоже можно задавать размер квадрата
....в принципе то что я предлагаю это аналог попиксельной проверки hitTestoм заисключением того что проверяется не каждый пиксель а каждый прямоугольник образованный проекциями координат на оси...
это должно работать быстрее ....
На одно нахождение проекций потребуется времени столько же
KorneKrabb
15.04.2004, 19:09
Nucer от изменения шага (STEP) уменьшается точность !!!
Ну ясно дело уменьшается. Но не очень и сильно.
KorneKrabb
15.04.2004, 19:28
на счет проекций - честно сказать не знаю... пока не начал ....
но думаю что при рисовании пользователем фигуры - в массив будут заноситься координаты при поворотах....
потом будет происходит сортировка информации....
построение виртуальной сетки делящей фигуру на примитивы...
сверение данных методом hitTesta...
...хм.. да наверное если пользователь попробует нарисовать стото слишком многоугольное это и займет ощутимое кол-во времени...
но по самой задумке игры у него просто не будет на это времени :)
А как будет происходить рисование? Юзер просто будет кликать в следующую точку?
KorneKrabb
15.04.2004, 21:46
....Nucer, пользователь будет управлять стрелками
попадая в определенную зону будет отчерчивать от нее куски которые и будут являться теми фигурами...
одним словом была очень давно такая игра - Xonix
меня всегда интересовал ее алгоритм....
кстати там будет еще один интересный момент -
когда юзер будет начинать очерчивать область из одной точки поля а замыкать контур в другой - то программе нужно будет автоматически прочерчивать оставшуюся часть фигуры.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.