- 1
angle_in_radians = acos(dot(normalize(o-a), normalize(o-b)));
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+21
angle_in_radians = acos(dot(normalize(o-a), normalize(o-b)));
Векторы такие сложные, а операции с ними так трудно запомнить, что даже игроделы не могут это сделать.
TarasB 20.01.2013 16:20 # +3
LispGovno 20.01.2013 17:26 # −4
Ты знаешь, могло быть и хуже:
Или даже Scala-style (как-то так, ждем Романа):
bormand 20.01.2013 17:33 # +5
tirinox 20.01.2013 18:57 # +1
Мистер Хэнки 22.01.2013 18:13 # +3
govnomonad 21.01.2013 05:19 # +5
guest 13.09.2013 00:02 # −6
[email protected] (Спросить Тараса)
TarasB 20.01.2013 17:37 # −8
Вектора учи.
guest 29.01.2013 18:55 # −1
guest 13.09.2013 00:02 # −6
[email protected] (Спросить Тараса)
govnomonad 21.01.2013 17:40 # +1
WGH 20.01.2013 17:35 # +2
TarasB 20.01.2013 17:37 # −8
TarasB 20.01.2013 17:37 # −6
Через 5 лет такими темпами 95% будет думать, что код
- нормальный
WGH 20.01.2013 17:46 # +3
А теперь расскажи, где в собственно посте говно.
WGH 20.01.2013 17:54 # 0
LispGovno 20.01.2013 21:45 # −1
TarasB 20.01.2013 18:02 # −4
Минусаторы, идите НААААХУЙ из программирования, и возвращайтесь только выучив до мозга костей всё, что связано с векторами.
WGH 20.01.2013 18:05 # −1
Что, правда?
TarasB 20.01.2013 18:07 # −2
Второй - гумно?
А как делаешь арккосинус ты?
Сопроцессор умеет только fpatan.
Решение через многочлен, через 10 умножений? Думаешь сейчас это будет быстрее?
WGH 20.01.2013 18:20 # 0
Хорошо, ты прав, в x86 только такая инструкция есть.
Тем не менее, лучший вариант - в студию.
TarasB 20.01.2013 18:23 # −3
LispGovno 20.01.2013 21:47 # −6
LispGovno 20.01.2013 21:51 # −4
LispGovno 20.01.2013 22:03 # −6
movaxbx 20.01.2013 22:10 # +14
Saint-Pascal, QC · http://www.tbsoftware.com
inkanus-gray 20.01.2013 23:26 # −1
absolut 21.01.2013 08:58 # +3
bormand 21.01.2013 09:32 # +3
Можно ссылочку на профиль?
LispGovno 21.01.2013 09:36 # −2
3.14159265 21.01.2013 15:34 # +10
Очень похоже.
TarasB 21.01.2013 16:09 # +5
absolut 21.01.2013 16:25 # +11
Vindicar 20.01.2013 23:49 # +4
Вместо "кококорукиизжопыкококовонизпрофесси и" лучше бы привел пример того как ты считаешь правильно и указал почему именно так. Аргумент "это ж очевидно" не принимается.
А если тестами подтвердишь, так вообще шикарно будет.
LispGovno 20.01.2013 23:57 # −4
Vindicar 20.01.2013 23:58 # +1
bormand 21.01.2013 08:14 # +2
Минусовал конкретно 167425 и 167424. Топик и остальные содержательные комменты плюсанул.
TarasB 21.01.2013 09:44 # +2
Ты считаешь, что игродел, не знающий вектора, не должен вылететь из профессии?
LispGovno 21.01.2013 09:52 # −5
Кстати, есть ли реально хоть одна область применения пузырьковых сортировок?
absolut 21.01.2013 09:57 # +3
тест для сравнения производительности сортировок
LispGovno 21.01.2013 10:00 # −4
TarasB 21.01.2013 09:59 # +4
bormand 21.01.2013 10:26 # +6
Безусловно.
Но если начинать проект с задрачивания "узких мест" - то этот проект никогда не взлетит. Поверь мне, Тарас. К тому же на начальном этапе не всегда понятно, где же будут эти самые узкие места.
Имхо, задумываться о константах в производительности нужно уже после того как ясны основные идеи, и написан какой-никакой остов проекта.
Здесь же я вижу просто набросок, который автор когда-нибудь перепишет по-нормальному, когда увидит, что это место является узким, и все-таки выучит векторы.
TarasB 21.01.2013 10:37 # +1
Находить угол нормально, а не жопой арккосинусом - это не задрачивание узкого места, это так же естественно, как использовать кусорт вместо пузырька.
Если б на гд.ру были подписи, то я бы поставил туда "использую путырёк вместо кусорта, потому что Кнут сказал, что оптимизация - зло".
Жупел неосиляторов нормальных алгоритмов.
bormand 21.01.2013 11:09 # +4
А для новичка? Ему сейчас важнее понять общие концепции, понять как собрать из всех этих разрозненных знаний работоспособную игру, а знания о том что углы считают через atan2, а не через acos - они придут с опытом, если он конечно не посчитает все это слишком сложным, и не уйдет в дворники...
А вот если он будет сосредотачивать внимание именно на таких моментах, а не на общей концепции - его игра никогда не увидит свет, и появится еще один недопиленный движок, коих сотни на том же ГД...
У проекта, который неопытный программист попытается сделать сразу же идеальным, почти нет шанса на жизнь.
TarasB 21.01.2013 11:18 # +3
Этот говнокод не новичок предложил, понимаешь? Я б тогда его не выложил. Это предложил опытный человек на вопрос новичка, и в этом-то пиздец и заключается.
bormand 21.01.2013 11:33 # +1
А вот это пиздец. Теперь полностью солидарен с Тарасом. Учить новичков говну нельзя.
TarasB 21.01.2013 11:35 # +1
bormand 21.01.2013 12:25 # +2
Самое забавное - тот самый новичок начал с арктангенса, а местные гуро ему насоветовали косинус и "смотреть на знак векторного произведения"...
P.S. Векторное произведение только ради его знака это говнокод намного сильнее чем тот, который в топике.
TarasB 21.01.2013 13:28 # +2
XD
> Векторное произведение только ради его знака это говнокод намного сильнее чем тот, который в топике.
Кстати, нет. Вменяемую альтернативу я не нашёл. Хотя искал: http://www.gamedev.ru/code/forum/?id=171290&page=5#m60
defecate-plusplus 21.01.2013 12:03 # +3
obvious fix
bormand 21.01.2013 10:02 # +2
Лабы.
WGH 21.01.2013 14:50 # +4
Ещё как есть. Представь себе scoreboard какой-нибудь онлайн игры. Игроков сортировать по очкам выгоднее всего именно пузырьком. Чего уж там, Unreal Tournament на клиентах каждый тик его сортирует (при условии, что он открыт), и ничего.
bormand 21.01.2013 15:18 # +1
В декоративных целях - конечно. Пузырьковая сортировка красива и не сильно отвлекает от просмотра таблички.
WGH 21.01.2013 15:22 # +5
Пузырек очень хорошо себя ведет тогда, когда список уже отсортирован. А большую часть времени список действительно отсортирован.
Кроме того, какое изменение приводит к тому, что список нужно пересортировать? Когда игрок набрал сколько-то очков в выбился вперед. Его просто нужно поменять местами с другим игроком. Именно таким образом пузырек и сортирует.
bormand 21.01.2013 15:36 # +1
Теперь понятно. Спасибо.
guest 26.01.2013 18:25 # 0
WGH 26.01.2013 18:28 # +1
guest 19.02.2013 16:47 # 0
bormand 21.01.2013 09:54 # +4
Не должен. Каждый человек чего-то не знает, в этом нет ничего плохого, особенно если он начинающий. Сам вот найди свой код 5-10 летней давности, и почитай его, увидишь что годы прошли не зря ;)
Вот если он не хочет учиться и разбираться в том, с чем ему приходится работать - вот тогда гнать его из профессии ссаными тряпками.
TarasB 21.01.2013 10:00 # +1
Хорошо, геймдизайнер, скриптовик, художник итд не должен. А тот, кто пишет движок, особенно узкие места - знать обязан. И если он спрашивает "где говно", то это пиздец, полный пиздец.
Представь, что ты попал в умественно отсталый мир, где все знают только пузырьковую сортировку и на твои вопрсы отвечают "а что такого-то". Ты на местный говнокод шлёшь чужой код с пузырьком, тебе тоже отвечают, что говна не видят. Ты в полном ахуе пишешь "учи алгоритмы, быдло, а пока не выучишь, съеби из профессии", а они тупо удивляются.
absolut 21.01.2013 10:32 # +2
>а пока не выучишь, съеби из профессии"
со своим уставом, да в монастырь ...
bormand 21.01.2013 10:38 # +4
И в чем же тут говнокод? В самой сортировке пузырьком говна нет, как и в любом другом наивном алгоритме. В коде из топика, выдранном из контекста, тоже никакого говна нет - это просто наивная реализация алгоритма, скопированная из школолольного учебника по математике.
В наивных алгоритмах нет говна, Тарас. До тех пор пока их не начинают продвигать как "оригинальные и эффективные" решения.
TarasB 21.01.2013 10:49 # +2
Есть. Если его продвигает тот, кто должен быть в теме - то есть. А если он уже успел где-то подхватить лозунг про оптимизацию - то всё пропало, он необучаем, у него есть отмазка на всё.
bormand 21.01.2013 11:10 # 0
TarasB 21.01.2013 11:16 # +2
bormand 21.01.2013 11:41 # +6
Тарас, ну ты же понимаешь, что специализации тут у всех разные. Кто-то с СУБД целыми днями работает, кто-то по хардкору пишет прошивки под контроллеры, кто-то занимается сайтами...
Да и такое знание про поиск угла - это не провалы в геометрии и векторах, это провалы в знании особенностей платформ, на которых нет арксинуса и арккосинуса. (Но при этом есть шустрые алгоритмы для приближенного их вычисления, которые раза в 4 быстрее твоего арктангенса, и дают 4 верных цифры, которых вполне хватит для многих геймдевовских применений).
vistefan 21.01.2013 19:23 # +4
НО! Разве был бы здесь тогда весь этот уютненький срач который так приятен для Тараса, поверьте, и разве нахватал бы он тогда сначала минусов, потом плюсов, потралил бы гумно? Нет. Это был бы просто топик из разряда унылых, которые даже более Б-гомерзки, нежели утонувшие.
kyzi007 21.01.2013 13:40 # +5
3.14159265 21.01.2013 22:16 # +2
kyzi007 22.01.2013 04:19 # +2
Я еще зеленым новичком крепко запомнила слова одного матерого и успешного дядьки (альтернатива 3д, ага) - мы не оптимизируем миллисекунды в циклах, мы оптимизируем архитектуру. Не ручаюсь за точность пересказа правда, но смысл такой. Время можно потратить лучше чем надрачивая до блеска алгоритмы которые вообще неизвестно нужны ли.
roman-kashitsyn 22.01.2013 08:16 # +2
TarasB 22.01.2013 09:32 # −1
Например, брать угол через арккосинус.
bormand 22.01.2013 10:10 # +3
Тарас, черезжопие в архитектуре может (и будет) просаживать производительность намного больше, чем твой несчастный арккосинус... Он медленнее арктангенса на жалкие проценты. А вот кривая архитектура, из-за которой, к примеру, рисуются все полигоны вместо нужных - это порядки, а не проценты.
И ускорив вдвое вычисление угла, которое занимало, к примеру, 5% от общего времени работы, ты получишь выигрыш всего на 2.5%... Оно того стоило?
bormand 22.01.2013 10:14 # +2
Любой черезжопице, Тарас, есть одно оправдание - идеальная программа разрабатывается бесконечно долго.
Реальную же программу нужно написать за ограниченный срок. Идеальный проект должен быть идеальным, без единого изъяна. Реальный же проект просто имеет требования, в которые нужно уложиться.
К примеру:
Идеальный проект: "Движок должен рендерить максимально быстро".
Реальный проект: "Движок должен рендерить сцены определенного вида с ограниченным количеством объектов на GT8600 с фпс не ниже 60".
Реальный проект будет разработан за реальный срок, а идеальный не выйдет дальше первой демки, в которой крутится какой-нибудь кубик.
Посмотри на геймдев Тарас... Что ты хочешь? Идеальный код, которого ты никогда не увидишь в действии? Или же игру, в которую можно будет поиграть, и порадоваться за успехи земляка, написавшего ее?
defecate-plusplus 22.01.2013 10:28 # +2
есть специфические области, в которых специфический программист не имеет права плавать
если это 2д/3д, то работа с координатами должна быть эффективной
хотя лично я линейную алгебру проходил 10 лет назад и вообще ничего из нее не помню - потому что специфика другая
но, уверен, в 2д/3д всевозможные рецепты по поворотам, трансформациям, нормализациям и прочим ациям уже давно разжеваны, поэтому программисту надо не велосипедить, а подглядывать в справочник
и программа будет написана тем быстрее, чем быстрее он ориентируется в этом справочнике - и тем быстрее, если справочник у него в голове
bormand 22.01.2013 13:06 # +3
... а взять уже давным-давно написанную им (или кем-то еще) функцию из библиотечки, которая была им наработана во время написания прошлых проектов.
> есть специфические области, в которых специфический программист не имеет права плавать
Ну да, тут согласен. Но это больше к профессионалам относится, чем к контингенту геймдева, который охаивает Тарас. Там 99% свою игру хотя бы до играбельного состояния допилить, я уж молчу про шлифовку линейной алгебры.
TarasB 22.01.2013 13:14 # 0
Да туда тоже вроде как профи ходят. Ну судя по их уверенности в своём проффесионализме.
bormand 22.01.2013 13:21 # 0
Профи - это как минимум те, у кого уже есть готовые игры или хотя бы готовый двиг для нее. Как человек не дописавший свою единственную игру до играбельного состояния может считаться профи в разработке игр?!
LispGovno 22.01.2013 14:59 # +2
bormand 22.01.2013 15:10 # 0
1) Я где-то называл себя профи геймдева?
2) Да, ко вторым, а ты, очевидно, со своего острова к нам пишешь?
P.S. Ты считаешь, что человек может называть себя профи в какой-то практической области ничего там толком не добившись и зная только теорию?
LispGovno 22.01.2013 15:17 # +2
А где я назвал себя профи? Просто говорю, что Тарас, мнящий себя профи не нужен. Нужен Тарас, являющийся профи.
bormand 22.01.2013 15:19 # 0
Хм, так это было не мне а Тарасу?
P.S. Большая человеческая просьба - цитируй кусок фразы, когда текст превращается в стену, а то тут уже хуй поймешь кто кому что пишет.
defecate-plusplus 22.01.2013 16:29 # +7
> bormand, ты - хуй!
bormand 2 часа назад #
> это я то хуй?
LispGovno 2 часа назад #
> да не ты, а Тарас!
bormand 2 часа назад #
> а, тогда всё верно
absolut 22.01.2013 19:28 # +1
всё верно, только вот уже 5 часов назад
bormand 22.01.2013 20:24 # 0
Вот поэтому я из-под guest'а пишу "только что".
LispGovno 22.01.2013 16:34 # 0
Ну я дерево вижу. Может тебе плагин какой нужно поставить, чтобы браузер стал нормально дерево отображать? Говорят в сети есть даже плагин, что линии дорисовывает к дереву.
А вот так можно без плагина:
http://www.youtube.com/watch?v=zqHV625EU3E
TarasB 22.01.2013 10:34 # −1
Когда я вижу код с арккосинусом, я испытваю то же, что и при виде кода с
if (a.ToString()=="TRUE"), новички вообще не понимают код if(a) , у них это "если "а" - если "а" что? Вот если а - истино мне понятно".
А пиздец в том, что из дохренищи программистов, с которыми я обсудил этот момент, большинство тоже не считает решение через арккосинус черезжопным! Это говорит о том, что из этих профи у большей части серьёзный пробел в такой элементарной базовой фигне, как векторы!
А ещё меня бесит, когда этой хуйнёй про архитектуру оправдывают более медленный код, даже если явно более мутный. Это уже извращение мышления, подмена понятий, шиза какая-то, когда более медленное автоматом считается более читабельным.
kyzi007 22.01.2013 12:29 # +2
TarasB 22.01.2013 13:04 # 0
Только вот если это относится к программисту из игростроя, то это непригодный программист.
bormand 22.01.2013 13:15 # +2
Если это относится к разработчику самого движка или шейдеров. Тот, кто пишет скрипты для "AI", или другие модули, не имеющие отношения к геометрии и векторам вообще-то не обязан знать досконально линейную алгебру.
P.S. А т.к. среднестатистическому геймдевовцу приходится работать в одиночку, и писать и скрипты и шейдеры, и движок, и UI, да еще и рисовать - несознательное использование арккосинуса и других наивных формул можно простить.
TarasB 22.01.2013 13:26 # 0
То знать формулы он должен, примерно так же, как он должен не писать if b=true
bormand 22.01.2013 13:36 # +1
Ну-ну. Если он во всех областях, требуемых в геймдеве, настолько про... то я не знаю чего он забыл на геймдев.ру. Я думаю среди себе подобных ему было бы намного интересней.
TarasB 22.01.2013 13:42 # −1
bormand 22.01.2013 14:08 # +2
Не знаю что еще ответить, Тарас. Ты и прав и не прав.
Прав в том плане, что движок задрочившего линейку (и, в обязательном порядке, ее практические применения для машграфики на конкретных платформах) будет шустрее и красивей.
Не прав в том плане, что линейка это только малая часть всех знаний, которые потребуются, чтобы реализовать 3d игру целиком. И новичку скорее нужны базовые знания во всех этих областях, чем доскональные в одной, и нулевые в других.
kyzi007 22.01.2013 14:10 # +1
kyzi007 22.01.2013 14:17 # +1
TarasB 22.01.2013 15:12 # 0
kyzi007 22.01.2013 22:45 # +1
Но наши экономят создание простых объектов (кеши) - это страшнее. При этом при загрузке пол тысячи квестов при старте игры каждый отправляет сигнал об обновлении, несколько тысяч видов ресурсов делают то же самое.
TarasB 22.01.2013 15:15 # 0
Новичку есть смысл делать самому, чтобы лучше знать кишки, но если советчики считают себя достаточно квалифицированными не только чтобы давать советы, но и ещё и защищать своё говно, но при этом школьную линейку нихрена не знают, то это очень плохо.
Lure Of Chaos 23.01.2013 00:26 # 0
да не, скорее проблема как раз в том, что в школах\универах матан и алгоритмы задрачивают до зубрежки, а вот планированию\выбору инструментов не учат.
в итоге дрочат на ООП и наносекунды.
bormand 22.01.2013 12:53 # +1
Да причем тут векторы? С точки зрения математики эта формула верна.
А вот для вычислений на эвм она не оптимальна. Поэтому, имхо, надо обвинять в неумении оптимизировать вычисления на практике, а не в незнании теории (хотя и оно, скорее всего, имеет место быть).
TarasB 21.01.2013 09:46 # +1
А вот если большая часть программистов из игростроя не знает, как найти угол и делает это через задницу, то русский игрострой действительно неадекватен и наводнён быдлятинкой, которую надо отправить либо на матан на переобучение, либо на метан.
Vindicar 21.01.2013 11:19 # +1
В общем, пока что код выдран из контекста.
Вот если на это будет указано как на узкое место в текущей реализации, а кодер скажет "а иначе никак" - тогда да, посыл в учебник уместен. А до тех пор рано.
TarasB 21.01.2013 11:24 # −1
Lure Of Chaos 23.01.2013 00:27 # 0
absolut 23.01.2013 09:41 # +1
LispGovno 20.01.2013 17:52 # −5
LispGovno 20.01.2013 17:54 # −5
guest 13.09.2013 00:03 # −6
[email protected] (Спросить Тараса)
ISO 14.09.2023 09:15 # 0
inkanus-gray 20.01.2013 18:09 # −2
guest 13.09.2013 00:03 # −6
[email protected] (Спросить Тараса)
inkanus-gray 20.01.2013 18:16 # +2
Итого:
Так что ли?
P.S. А, ну да, у меня лишнее извлечение корня и возведение в квадрат. Поэтому так:
TarasB 20.01.2013 18:24 # +4
Ну ладно, знаменатель хоть правильный.
И да, делить не обязательно, атан2 принимает сразу два аргумента.
inkanus-gray 20.01.2013 18:29 # +2
TarasB 20.01.2013 18:30 # +3
Ой, я забыл сказать, тема про 2д
Теперь ты сделал хуже, чем было, лишнее деление
Пост назад ты дал почти верный ответ для многомерного случая.
inkanus-gray 20.01.2013 18:33 # +1
guest 13.09.2013 00:03 # −6
[email protected] (Спросить Тараса)
WGH 20.01.2013 18:33 # +2
P.S. Кстати, почему o-a? a-o было бы логичнее.
inkanus-gray 20.01.2013 18:40 # 0
TarasB 20.01.2013 18:44 # +3
Моё мнение об общем уровне программистов в России упало на 1 пункт.
WGH 20.01.2013 18:46 # +1
TarasB 20.01.2013 18:48 # +3
roman-kashitsyn 20.01.2013 20:38 # +2
movaxbx 20.01.2013 21:46 # 0
>В школу пусть идёт, если не знает такие вещи
>возвращайтесь только выучив до мозга костей всё
У меня прямо ностальгия по матану в университете.
inkanus-gray 20.01.2013 18:53 # 0
TarasB 20.01.2013 19:24 # +3
inkanus-gray 20.01.2013 19:58 # 0
TarasB 20.01.2013 20:30 # +4
Кому нужно только значение, без знака, те пусть сами модуль берут.
Но в 80% случаев знак нужен.
inkanus-gray 20.01.2013 20:47 # 0
bormand 20.01.2013 20:50 # +1
P.S. Не могу вспомнить, в какую сторону включительно, но должен покрывать все углы.
UPD: [−π,π], т.к. оно оказывается еще на знаки нулей смотрит.
inkanus-gray 20.01.2013 20:51 # 0
inkanus-gray 21.01.2013 01:16 # 0
bormand 21.01.2013 05:31 # 0
P.S. Кто знает как на интеле сгенерить -0 не прибегая к битоёбству?
bormand 21.01.2013 05:36 # 0
Вот так: http://ideone.com/5WtY83
absolut 21.01.2013 09:10 # 0
http://ideone.com/gMGHZL
LispGovno 21.01.2013 09:13 # 0
И:
http://liveworkspace.org/code/3F4QzO$0
absolut 21.01.2013 09:18 # 0
defecate-plusplus 21.01.2013 09:21 # +2
logical cpus: 8
cpu cores: 8
hyper-threads: false
absolut 21.01.2013 09:23 # +2
bormand 21.01.2013 09:39 # +2
http://defecateworkspace.org
http://defecateone.com
absolut 21.01.2013 09:48 # 0
>http://defecateone.com
Сервер не найден ... видимо перегружен кол-вом желающих погонять
absolut 21.01.2013 09:39 # 0
Vendor: GenuineIntel
logical cpus: 16
cpu cores: 8
hyper-threads: true
defecate-plusplus 21.01.2013 09:40 # 0
что за зверь?
двухпроцессорный конфиг?
LispGovno 21.01.2013 09:42 # +1
defecate-plusplus 21.01.2013 10:12 # 0
почем свой 8 ядерный ксеон брал?
absolut 21.01.2013 09:45 # 0
i7-2600, видать из-за того, что ht = true
defecate-plusplus 21.01.2013 10:10 # 0
у меня как раз почти такой
4 ядра * 2 гипертрединг = 8, но не 16
с другой стороны, в настройках виртуальной машины под линух отдано 8, хотя ползунок способен до 16 - причем больше 8 виртуалбокс жалуется, что число виртуальных цпу превысило тех, которые в наличии на хосте - может в этом дело?
absolut 21.01.2013 10:43 # 0
ну я запускал на родной win7. vmwarя точно так же ругается, но тем не менее выхлоп кода я указал честно.
bormand 21.01.2013 09:37 # +4
Intel, которые поддерживают систему команд amd64 в 64х-битном режиме...
Смешались в кучу кони, люди...
3.14159265 21.01.2013 22:29 # +2
2003-2006 амд в кои-веки выхватила лидерство.
Потому альтернативой для intel могла стать потеря существенной доли рынка (ибо переписать весь софт под IA64 невозможно, а популярность 64-битных систем и нужда >4Gb памяти сильно росла) и неприятные перспективы.
А вот с амдшными sse5 они специально сделали несовместимые префиксы коммнад, ибо сейчас благодаря core arch они на коне и могут диктовать остальным свои правила.
TarasB 21.01.2013 09:48 # +4
LispGovno 21.01.2013 09:59 # 0
И прав и хуйню сказал
http://ideone.com/4JfoYL
http://ideone.com/P6jrRG
-1*0.0
inkanus-gray 21.01.2013 11:16 # 0
UncleAli 23.01.2013 01:28 # +1
http://ideone.com/7N6sNa
3.14159265 21.01.2013 22:19 # +6
Мой отрицательный клон, из антивселенной?
С бородкой.
TarasB 22.01.2013 09:30 # +3
bormand 22.01.2013 13:30 # +1
И тут число Тараса...
TarasB 20.01.2013 18:43 # +3
И кросс этот только в 3д есть.
Не, я подумал, кросс это 6 умножений, для длины ещё 3, а тут 3+3+1+3+1, больше.
LispGovno 21.01.2013 08:08 # −3
Вектора учи.
TarasB 21.01.2013 09:47 # +3
LispGovno 21.01.2013 09:55 # −3
bormand 21.01.2013 09:59 # +1
bormand *готовит попкорн*
TarasB 21.01.2013 10:01 # +3
bormand 21.01.2013 11:12 # +1
TarasB 21.01.2013 11:15 # +6
3.14159265 21.01.2013 22:06 # +1
>он хоть приведет какие-то формулы или начнет тебя троллить
Ну тогда Тарасу пришлось бы взять в руки вантус.
inkanus-gray 21.01.2013 11:36 # +3
В случае же двух векторов третий вектор будет неизвестным, т. е. результат произведения будет не вектором, а линейным оператором над вектором, т. е. тензором второго ранга.
TarasB 21.01.2013 11:42 # +6
(только в определитель 4й строкой дописываем не третий вектор, а единичные координатные вектора)
Но гумно знает способ перемножения именно двух векторов в n-мерном пространстве.
inkanus-gray 21.01.2013 12:12 # +1
Просмотрел ещё раз ленту комментариев. Вопрос был именно про векторное произведение двух векторов. Так?
Есть универсальная формула произведения двух векторов в произвольном n-мерном пространстве (http://ru.wikipedia.org/wiki/Внешняя_алгебра), но операцию, результатом которой неизменно является тензор второго ранга, назвать векторным произведением язык не повернётся. А раз так, то и векторного произведения двух векторов вне 3д не существует.
Интересно, вернётся ли гумно в обсуждение.
roman-kashitsyn 21.01.2013 12:16 # +5
частичное применение
inkanus-gray 21.01.2013 19:57 # +2
3.14159265 21.01.2013 22:24 # +2
Оно обладает феноменальным свойством - обсираться и фейлить на ровном месте.
Такой талант в унитаз спукает.
bormand 21.01.2013 12:26 # +2
Я тоже знаю - dot(a, b). Два вектора, перемножаются, что не так?
LispGovno 22.01.2013 11:26 # 0
TarasB 22.01.2013 11:32 # 0
LispGovno 22.01.2013 12:28 # 0
TarasB 22.01.2013 13:05 # 0
Процесс нахождения интеграла называется интегрированием.
bormand 22.01.2013 12:32 # +6
WGH 21.01.2013 22:14 # +1
В 2D нужно заменить length(cross(...)) на cross(...).z (первым же комментарием на это обратили внимание). Только не просто "достаточно", а "нужно".
Таким образом возникает вопрос - а в 3D что делать? Так, как написано в посте?
TarasB 21.01.2013 22:17 # +3
Потому что тридэ, там углы не имеют знака.
inkanus-gray 21.01.2013 23:27 # +2
guest 13.09.2013 00:03 # −5
[email protected] (Спросить Тараса)
bormand 20.01.2013 20:42 # +4
guest 22.01.2013 07:04 # −2
guest 13.09.2013 00:03 # −5
[email protected] (Спросить Тараса)
Centry 22.01.2013 14:17 # 0
bormand 22.01.2013 14:56 # 0
TarasB 22.01.2013 15:19 # +2
bormand 22.01.2013 15:25 # +1
TarasB 22.01.2013 15:34 # +2
Народ просто стыдится ёбли байтов настолько, что просто психические отклонения какие-то получаются, у некоторых вот замена цепочки ифов на свич - это предварительная блять оптимизация, не, ну не пиздец, это насколько надо ёбнуться, чтобы такую хуйню сморозить?
bormand 22.01.2013 16:00 # +3
На самом деле высказывание то хорошее, годное. И добра оно принесло намного больше чем зла - спасло кучу проектов от погружения в байтоёбскую трясину, из которой часто можно выбраться только полным переписыванием...
Просто некоторые несознательные личности вооружились им в свою защиту, и прикрываются им тогда, когда считают это выгодным, тем самым дискредитируя вполне разумную мысль.
P.S. Нет, в байтоёбстве нет ничего плохого, отнюдь. Это как острый скальпель, которым неопытный человек может максимум порезаться, а опытный хирург - спасти чью то жизнь...
TarasB 22.01.2013 16:11 # +1
Вот именно, и это принимает иногда просто такие маразматичные формы, что я просто в шоке с такого.
bormand 22.01.2013 20:14 # +2
guest 13.09.2013 00:03 # −5
[email protected] (Спросить Тараса)
LispGovno 22.01.2013 15:06 # +4
TarasB 22.01.2013 15:16 # +1
Как называется твоя платформа?
Кстати, обсуждаемый код ещё и две нормализации делает.
bormand 22.01.2013 15:20 # +2
Есть случаи, когда всего одну. Один из векторов мог быть нормализован заранее.
TarasB 22.01.2013 15:24 # +1
bormand 22.01.2013 15:26 # +1
Даже в шести. Т.к. normalize всяко делит каждый член на тот самый корень.
P.S. Хотя на самом деле normalize может и не делить, а умножать - не зря же Кармак писал свой знаменитый 1/sqrt(x).
3.14159265 22.01.2013 20:08 # +5
Просто заюзал в известном и коммерчески успешном прожекте.
Вот в чем отличие: у Тараса низкоуровневое дрочево - цель. А у Кармака средство.
TarasB 22.01.2013 20:33 # +3
лолшто
3.14159265 22.01.2013 20:51 # +4
Для такой простой темы под 200 постов это перебор.
TarasB 22.01.2013 21:04 # −2
Я думал, поржут, будет 10 постов, и всё.
А тут неосиляторов большая часть оказалась...
3.14159265 22.01.2013 22:30 # +2
Это всё идет из таких мануалов, а по сети именно тот способ что ты опубликовал и гуляет. Человек глянул - dot есть косинус между векторами. Мышление далее автоматически предлагает acos.
Только вот далее в твоей аргментации есть одна проблема. Гумно меня в этом опередил.
Что быстрее acos или atan - зависит от платформы.
http://thokling.multiply.com/journal/item/46
И тут чрезвычайно много нюансов, а в итоге производительность больше откушивают непопадания в кеш, медленная память, чем математическая операция арккосинус.
WGH 23.01.2013 01:42 # 0
>But recently I was curious about actually calculating PI to get more precision in my OpenGL stuff.
Лол.
TarasB 23.01.2013 09:47 # 0
Пример?
> http://thokling.multiply.com/journal/item/46
И чё?
Там формула
pi/2 - arctg(a/sqrt(1-a*a))
да?
И как там случай +- 1 реализован? Вбит явно как отдельный случай? Тогда что удивительного?
3.14159265 24.01.2013 15:51 # 0
Сомневаюсь. Думаю там всё-таки оно внутри считается.
Поучительность примера в другом. Бутылочным горлышком оказалась совсем не функция обратной тригонометрии, а другое: либо конвертация с инта в флоат, либо умножение (в чем я сомневаюсь).
Это именно преждевременная оптимизация.
Но в общем таки ты прав. Теоретически твой способ смотрится лучше и кощернее.
Практика же предполагает бенчи.
TarasB 24.01.2013 16:05 # 0
Я намекаю на то, что если там такая формула, то в неё +-1 не влазят. Поэтому сдаётся мне, что это специальный случай.
3.14159265 22.01.2013 22:47 # 0
selffix
3.14159265 22.01.2013 22:56 # +3
Тут спору нет.
> "потому что Кнут сказал, что оптимизация - зло".
Он говорил о преждевременной оптимизации.
TarasB 23.01.2013 09:39 # +1
Но кому эти подробности нужны, когда надо оправдать свой быдлокод?
guest 13.09.2013 00:03 # −5
[email protected] (Спросить Тараса)
igumnovf 27.01.2013 16:17 # +2
angle = acos(dot(a,b)/norm(a)*norm(b))
Охуенно:
angle = atan2(norm(cross(a,b)), dot(a,b))
Тред не читал, слишком уныло.
igumnovf 27.01.2013 17:01 # 0
igumnovf 27.01.2013 17:34 # 0
TarasB 28.01.2013 17:04 # 0
igumnovf 28.01.2013 17:35 # 0
http://en.wikipedia.org/wiki/Inverse_trigonometric_functions
С другой стороны можно пытаться кэшировать dot и cross, но тогда если положение источника света изменится придется пересчитывать кэш. Как-то мутно все это.
bormand 28.01.2013 18:07 # +1
http://http.developer.nvidia.com/Cg/atan2.html
Для движка ведь далеко не везде нужна точность больше 3-4 знаков, для освещения имхо и 3 вполне сойдет.
P.S. На соседних страницах есть такие же acos и asin.
TarasB 28.01.2013 20:17 # +1
LispGovno 27.01.2013 17:48 # −3
>Говно
igumnovf 27.01.2013 17:55 # 0
guest 13.09.2013 00:03 # −6
[email protected] (Спросить Тараса)
guest 13.09.2013 00:03 # −5
[email protected] (Спросить Тараса)
guest 13.09.2013 00:04 # −5
[email protected] (Спросить Тараса)
guest 13.09.2013 00:04 # −5
[email protected] (Спросить Тараса)
guest 13.09.2013 00:04 # −5
[email protected] (Спросить Тараса)
guest 13.09.2013 00:04 # −5
[email protected] (Спросить Тараса)
guest 13.09.2013 00:04 # −5
[email protected] (Спросить Тараса)
guest 13.09.2013 00:04 # −5
[email protected] (Спросить Тараса)
guest 13.09.2013 00:04 # −5
[email protected] (Спросить Тараса)
guest 13.09.2013 00:04 # −5
[email protected] (Спросить Тараса)
guest 13.09.2013 00:04 # −5
[email protected] (Спросить Тараса)
guest 13.09.2013 00:04 # −5
[email protected] (Спросить Тараса)
guest 13.09.2013 00:04 # −5
[email protected] (Спросить Тараса)
napmor 25.08.2021 21:14 # 0