Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   программное рисование (http://www.flasher.ru/forum/showthread.php?t=57065)

KorneKrabb 15.04.2004 14:08

программное рисование
 
как вычислить площадь программно нарисованной сложной фигуры ?

Dindin 15.04.2004 14:35

Это зависит от фигуры. Если фигура действительно сложная, то проще всего разбить ее (условно) на примитивы и сосчитать сумму их площадей. Встроенного вычисления площади во flash, насколько я знаю, нет.

KorneKrabb 15.04.2004 14:44

Да.... это можно представить если фигура выпуклая .... хотя и с трудом.... а что если она таковой не является ?

FreeLander 15.04.2004 15:23

2KorneKrabb
 
Цитата:

это можно представить если фигура выпуклая .... хотя и с трудом.... а что если она таковой не является ?
причём тут выпуклость?

ты ж фигуру на плоскости рисуешь - вот и считай площадь плосого объекта - ГЕОМЕТРИЯ.

или может ты имел в виду rectangle нарисованного объекта - тогда рисуй в новом мувике и смотри его высоту и ширину.

или я действительно чего-то не понял.

KorneKrabb 15.04.2004 16:21

фигуре необязательно быть трехмерной чтобы называться выпуклой :)
в данном случае выпуклая фигура это некая фигура состоящая скажем из двух прямоугольников слепленных по сторонам
а вогнутая это один прямоугольник из которого (булевой операцией) "выкушен" второй ( С-образная фигура )

причем по замыслу фигура рисуется не прямоугольниками а скорее всего через угловые точки...
говоря грубым языком пользователь задает эти точки тем или иным образом, а программа проводит через них линии закрашивая контур . далее она должна вычислять ПЛОЩАДЬ фигуры

Nucer 15.04.2004 16:53

Как как - с помощью интегралов. Если ты напишешь такой алгоритм то тебе дадут какую-нибудь премию. Лучше действительно с помощью циклов. Например находишь верхнюю,самую нижнюю, самую левую и самую правую точки объекта и спускаешься на одну точку вниз и проходишь цилом вправо, проверяя текущую точку на принадлежность к объекту. Только это лагать будет не слабо

KorneKrabb 15.04.2004 17:12

Nucer я думаю то что в любом случае фигура будет состоять из N-ного количества прямоугольников это уже Плюс... дробить конечную фигуру на прямоугольники легко если она нарисована на листке бумаги перед носом.
а программно, опираясь лишь на координаты углов...... геммор...
в юности я работал на Бейсике ( самой древней его версии )
я применял там этот метод ( попиксельная проверка картинки ) но не хочу снова прибегать к нему так как представляю сколько это будет занимать времени...


может есть еще какие нибудь идеи ?

Nucer 15.04.2004 17:14

Вложений: 1
Можно например так

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

Вложений: 1
сорри, не получилось.
попытка номер двас: файл в МХ

Nucer 15.04.2004 17:53

Вложений: 1
Но лучше так. И дейтвительно, если у тебя фигура образована прямыми то вполне реально вычислить другим методом

Dindin 15.04.2004 18:13

Хороший алгоритм - фозьму на заметку (если ты не против) :)

KorneKrabb 15.04.2004 18:23

Вложений: 1
Nucer, тестируему Celeronу потребовалось несколько секунд на то чтобы вычислить площадь (что огорчает)
представь сколько думал Бейсик ! :)
но как я понял это единственный на данный момент реальный способ вычисления , но вот что я думаю . что если поделить фигуру на прямоугольники опустив из каждой точки проекции и получив при этом некое количество прямоугольников ( в том числе и не относящихся к фигуре).
далее в каждом из них найти некую точку Z (точка с нбольшим отступом от угла прямоугольника ). и уже в этой точке проверить относиться ли он к фигуре или нет
если да то прибавить его площадь к общей если нет игнорировать ?
если слишком коряво объяснил смотрите рис.

Nucer 15.04.2004 18:40

Вложений: 1
Насчёт нескольких секунд это ты загнул посмотри ещё вот это ( кстати в MX 2004 раз в десять (!) быстрее )

KorneKrabb 15.04.2004 18:48

....в принципе то что я предлагаю это аналог попиксельной проверки hitTestoм заисключением того что проверяется не каждый пиксель а каждый прямоугольник образованный проекциями координат на оси...
это должно работать быстрее ....

Iv 15.04.2004 18:49

нарисовал квадрат 100x100, получил площадь 90000
учитывая, то, что чаще правильные фигуры рисуют с целыми значениями и в целых координатах, строку можно заменить на такую:
if (MC.hitTest(j+.5, i+.5, true)) {

что касается
Цитата:

// работает только при условии, что верхний левый угол фигуры находиться в точке 0x0
то это исправимо с помощью getBounds.

KorneKrabb 15.04.2004 18:51

ну это сейчас секунду :)
а впроцессе игры при наличии еще кучи объектов будет тормозить сильнее
а последние два файла у меня не открылись ( ну нету у меня Flash MX 2004 )))) ))

Nucer 15.04.2004 19:02

Вложений: 1
Да BitSky прав. Кстати у меня ведь тоже можно задавать размер квадрата

Nucer 15.04.2004 19:05

Цитата:

....в принципе то что я предлагаю это аналог попиксельной проверки hitTestoм заисключением того что проверяется не каждый пиксель а каждый прямоугольник образованный проекциями координат на оси...
это должно работать быстрее ....
На одно нахождение проекций потребуется времени столько же

KorneKrabb 15.04.2004 19:09

Nucer от изменения шага (STEP) уменьшается точность !!!

Nucer 15.04.2004 19:15

Ну ясно дело уменьшается. Но не очень и сильно.

KorneKrabb 15.04.2004 19:28

на счет проекций - честно сказать не знаю... пока не начал ....
но думаю что при рисовании пользователем фигуры - в массив будут заноситься координаты при поворотах....
потом будет происходит сортировка информации....
построение виртуальной сетки делящей фигуру на примитивы...
сверение данных методом hitTesta...
...хм.. да наверное если пользователь попробует нарисовать стото слишком многоугольное это и займет ощутимое кол-во времени...
но по самой задумке игры у него просто не будет на это времени :)

Nucer 15.04.2004 20:29

А как будет происходить рисование? Юзер просто будет кликать в следующую точку?

KorneKrabb 15.04.2004 21:46

....Nucer, пользователь будет управлять стрелками
попадая в определенную зону будет отчерчивать от нее куски которые и будут являться теми фигурами...

одним словом была очень давно такая игра - Xonix
меня всегда интересовал ее алгоритм....

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


Часовой пояс GMT +4, время: 08:24.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.