![]() |
Не правильная работа Math.random() или ошибка геометрии?
Возникла необходимость нарисовать сферу из рандомно расположенных пикселей, для рандомного распределения пикселей по поверхности сферы с центром в начале координатной сетки взял формулу
Код AS3:
Код AS3:
Сфера получается, но почему-то пиксели распределяются не равномерно по поверхности сферы, большая их концентрация приходится на полюса сферы, а на экваторах пикселей практически нет, получается как бы 2 полусферы. В чём ошибка? |
Math.random - не является функцией равномерного распределения, это функция нормального распределения. Именно поэтому игровые проекты используют дополнительные классы для получения равномерного распределения.
вот примеры: http://flashgameblogs.ru/blog/actionscript/204.html http://flash-mx.ru/forum/topic_show.pl?tid=2521 искал по-быстрому, так что наверняка есть еще варианты кодов. |
Очень сильно сложно сделать сферу из рандомных точек, давно пробовал, там алгоритмы это такая жесть и процессор кушают не слабо, но мне нужно было подобие октаэдра сделать те. сгенерить сферу из случайно разбросанных точек определенного числа треугольников. можно простое решение в 3Дмаксе кажется есть токая функция - фигура из определеного числа треугольных граней. вот ееможно сделать и чуток добавить рандомности в координаты ее вершин.
|
Спасибо за помощь, буду знать!
|
Вложений: 1
такая?
|
похож, но на экваторах у меня вообще практически отсутствуют пиксели. А чем вы такую подсветку сделали?
|
Это блюр к слою.
Добавлено через 6 минут Код AS3:
|
хм интересено.... вы как-то через вектора делаете. Я по формуле - квадрат радиуса равен сумме квадратов координат.
|
Формулы одинаковые, только вид разный. Вы используете даже не формулу, а уравнение сферы, по крайней мере меня так учили их разделять. А Функционер предлогает использовать тригонометрические уравнения, задающие сферу как систему функций x=x(t), y=y(t) и z=z(t).
Что быстрее возвести три раза в степерь и взять корень или вычеслить два синуса и косинуса угла при построении не знаю, вам решать. Зато вам хватит Math.random и сфера будет более менее однородная |
Dima_DPE, Что касается первой части вашего поста, то это не одна формула разного вида, если вы присмотритесь то Функционер сперва рандомом определяет направления(вектора), а потом по ним просчитывает каждую координату, а в способе который использовал я , х и у просчитываются рандомом а z по формуле квадратов... и результат отличается даже наглядно.И я думаю что для определённых задач один из способов будет более подходящий. Суть топика была в рандоме, и она уже раскрыта.
Что касается второй части вашего поста, то тут данная деталь не критична, т.к. этот алгоритм выполняется не каждый фрейм, а только при определении пикселей, далее же движок просчитывает пикселя на основе своих алгоритмов, абсолютно одинаково что у меня, что у Функционера, поэтому сотня лишних миллисекунд при создании сферы будет не в тяжесть конечному пользователю... |
| Часовой пояс GMT +4, время: 20:06. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.