DioD
offline
Опыт:
45,184Активность: |
Полярные координаты
Мною было выяснено что полярные координаты вызывают концентрацию объектов по осям смещеным на 45% от осей X\Y
!5\9 объектов сходятся именно у этих осей
как пример бага выкладываю карту, где это просматривается.
обратите внимание на миникарту, мобы будут созданы 2 раза, и в обоих случаях это правило не нарушается
ну и само собой такую несправедливость мною было решено исправить, кто может или хочет помочь, прошу отозваться |
22.12.2006, 18:31 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
nic666
offline
Опыт:
4,012Активность: |
Ну дык попробуй заменить ГСЧ, он же RND... тут и тема такая была ;)
nic666 добавил: Хотя, я попробовал свой генератор, результат примерно такой же... |
22.12.2006, 19:17 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
23,587Активность: |
DioD, что ты имеешь ввиду? Т.е. ты хошь сказать, что расстояние по окружности (в варике) от 44-го до 45-го градусов менше чем от 89-го до 90-го?
|
22.12.2006, 19:35 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
nic666
offline
Опыт:
4,012Активность: |
DioD
Всё брат! Я понял в чем проблема. Дело не в качестве ГСЧ, а в том как ты его используешь. Предположим что функция RND(360) выдает значения равновероятно, то есть равномерно. Но функция sin(RND(360)) уже не будет выдавать равномерные значения, а также и COS(RND(360)) - их значения подчиняются иной закономерности, а имено sin^2(a)+cos^2(a)=1 то есть поскольку sin(45)=cos(45), то при значении 45 имеется аномально большое равенство .sin(45)=cos(45)=sqrt(2)/2 Это не глюк полярной системы! Это закон тригонометрии!!! Чтобы исправить это используй одинаковый угол, вот так Код:
ну или вместо RND можно local real ang = GetRandomDirectionDeg() или тоже local real ang = GetRandomReal(0, 6.2831) Попробуй! |
22.12.2006, 19:43 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
23,587Активность: |
nic666, тока что глянул карту и тоже увидел.
DioD, вся фишка в том, что функции cos и sin нелинейные, так что хоть угол и равномерно рандомится, но sin и cos от этой равномерности получается неравномерный. Т.е. это не полярные координаты кревые, это у тебя функция не совсем для вычисления полярных координат. |
22.12.2006, 19:49 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
nic666
offline
Опыт:
4,012Активность: |
собствено в твоем оригинале и небыло полярной системы координат , там (R,a) задает точку, а у тебя "a" было разным для "x" и для "y" |
22.12.2006, 19:50 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
хехе, надо исправить эту багу не изменяя функцию напрямую, собственно для этого требуется линия распределения с взаимоисключаемыми объектами, позже явыложу это, хотя хз получиться это на джаз или нет |
22.12.2006, 20:00 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
nic666
offline
Опыт:
4,012Активность: |
такое впечатление, что меня абсолютно не поняли...
Ну DioD посмотри же на формулы R * Cos(ang), R * Sin(ang), пара чисел (R,ang) задают точку в полярной системе координат, у тебя просто была ошибка в формуле... нет никаких глюков. Код:
|
22.12.2006, 20:33 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|