Войти
ПрограммированиеФорумОбщее

Найти радиус и угол, зная координаты (4 стр)

Страницы: 1 2 3 4
#45
16:27, 25 янв 2023

Развели тут полемику из-за нескольких шейдерных инструкций.
Все эти ваши душные оптимизации времен царя гороха, современные видеокарты огромные числодробилки, где либо разницы в скорости не будет вообще, либо она будет на уровне погрешности. А в условиях современных игр с PBR/рейтрейсингами/нанитами/постэффектами/.... то вообще детский смех, а не оптимизации. Преждевременная экономия на спичках во всей красе.

#46
20:54, 25 янв 2023

Имбирная Ведьмочка
> float x = fragCoord.x - iResolution.x*0.5 - 0.5;
ты вообще заголовок темы читал?
Имбирная Ведьмочка
> Один косинус = 1 деление по модулю, примерно 6 умножений и 4 сложения.
а сколько корней?

твоё упорство в ненависти к тригонометрии восхищает, но ты явно не понял зачем и почему появилась эта строка. Просто посмотри пост, где она родилась и прочитай пост перед этим...

#47
21:04, 25 янв 2023

ivashko
> но ты явно не понял зачем и почему появилась эта строка.
Так ты предлагаешь не рабочий код жеж.

    float a = atan(y/x);
    float radius = abs(x/cos(a));

Подставь сюда: x = 0, y = 100
В 'radius' должно быть 100, а в 'a' должно быть Pi*0.5, а у тебя что выходит?

#48
21:13, 25 янв 2023

MrShoor
> Так ты предлагаешь не рабочий код жеж.
ну да, есть манень исключения, но это лучше чем то, что было выложено постом ранее. Ну не повторять же мне то, что было ещё раньше. А деление на ноль в шейдерах проскакивает на ура и на результат не влияет. Там всё размыливается и без шейдеров. твой шейдер может быть нарисован на экране вообще одной точкой, если модель далеко. Это ты ещё шейдеры первой и второй версии не писал. Знаешь сколько операций туда влазит? Там уже не до проверок на исключения и скорость. Там лишь бы ходов хватило...

#49
(Правка: 21:43) 21:27, 25 янв 2023

ivashko
> это лучше чем то, что было выложено постом ранее.
Чем?

ivashko
> Ну не повторять же мне то, что было ещё раньше.
А ты пробовал вообще ничего не писать и ничего не говорить? Прикинь, так можно было. Можно было после #7 вообще закончить тред и больше никому ничего не писать - вопрос в ОПе отвечен, проблема решена, ОП даже отчитался об успехе и поблагодарил за помощь.

ivashko
> А деление на ноль в шейдерах проскакивает на ура и на результат не влияет. Там
> всё размыливается и без шейдеров. твой шейдер может быть нарисован на экране
> вообще одной точкой, если модель далеко. Это ты ещё шейдеры первой и второй
> версии не писал. Знаешь сколько операций туда влазит?
ОП говорил, что на деления на ноль ему без разницы?
ОП говорил, что результат будет размылен?
ОП говорил, что результат будет рисоваться одной точкой?
ОП говорил, что программа должна умещаться в пределы шейдеров времён конца 90-х?
ОП говорил, вообще, что код пойдёт именно в шейдер?

Мой ответ - это решение, которое работает всегда.

Твой ответ - это решение, которое работает, только если тебе насрать на деления на ноль, результат рисуется только одной точкой, которая при этом обязательно должна быть размылена на весь экран, и это решение имеет смысл только в том случае, если ты пишешь ретро поделку под 3д ускорители, максимум возможностей которых - это ARB ассемблер. С вероятностью 99.9%, твой ответ - бесполезен, потому что ситуация ОПа не подходит под эти условия.

#50
(Правка: 21:33) 21:32, 25 янв 2023

ivashko
> но это лучше чем то, что было выложено постом ранее.
Если ты про посты роннико - то их можно смело игнорировать. Он кроме чуши на форуме ничего не пишет.

> Ну не повторять же мне то, что было ещё раньше.
Поэтому ты решил выдать частично рабочий код?

> А деление на ноль в шейдерах проскакивает на ура и на результат не влияет.
Не проскакивает, и на результат влияет, тебе Имбирная Ведьмочка это даже продемонстрировал.

> Там всё размыливается и без шейдеров. твой шейдер может быть нарисован на
> экране вообще одной точкой, если модель далеко.
> Знаешь сколько операций туда влазит? Там уже не до проверок на исключения и
> скорость. Там лишь бы ходов хватило...
Боже, какая же отборная чушь (роннико пора переживать, конкурент растет)

> Это ты ещё шейдеры первой и второй версии не писал.
Ты бы удивился, если бы реально знал сколько я шейдеров писал, пишу и еще буду писать.

#51
(Правка: 21:41) 21:40, 25 янв 2023

Ещё раз повторюсь - а с чего вы вообще взяли, что этот код пойдёт именно в шейдер? Вместо того, чтобы ответить на вопрос в начале темы, вы придумываете какие-то собственные говнопроблемы, никому больше не нужные, и даёте на них соответствующие говнорешения.

ivashko
> ты вообще заголовок темы читал?
Ну-ну, кто бы говорил.

#52
23:42, 25 янв 2023

так кто-нибудь знает, работает GPU со статичными данными или нет? Чтоб не считать их постоянно.

#53
(Правка: 0:26) 0:21, 26 янв 2023

Имбирная Ведьмочка
> ОП даже отчитался об успехе и поблагодарил за помощь.
С одной стороны я рад за Ронико, что ты не заметил его ошибки, ведь это к нему был обращён мой пост, а не к тебе. С другой стороны испытываю грусть за "навыки" местных, которые искренне верят, что длина радиуса якобы Равна ( и тут такая Цитата формулы Ронико) : "Сумме координаты Х и Y"...
Занавес... О чём после этого можно с вами спорить? Что 2*2 по вашеу не равно 4?
Для Ронико, у которого шейдер рисует из начала координат, а не из произвольной точки, этот вариант был бы рабочим. Если бы ты знал как работают шейдеры, ты бы не поднимал этот визг. Шейдер обсчитывает тысячи координат и ему плевать на мелкие огрехи. Никто даже не увидит мелких проколов. Видеокарта это на модели замылит.
Только MrShoor - единственный, кто заметил ошибку новичка Роннико и деликатно намекнул ему, что даскать пост 15 надо бы подправить.
Считаю дальнейший срач тут бессмысленным. Особенно с теми, кто первый раз увидел код шейдера. У вас слишком мало опыта, чтобы судить о таких вещах.

#54
(Правка: 3:03) 3:00, 26 янв 2023

ivashko
Единственный правильный ответ, который был озвучен в этом треде - это #4. Все остальные варианты - строго хуже.

Denadan
> angle = acos(x / radius);
> if(y < 0) angle = 2*pi - angle
Даёт неправильный ответ, когда radius=0.
Питушит ответы, когда abs(y) << x. Например, при (x,y) = (100500, 1), правильный метод даёт 9.950249e-6, а указанный - ноль ровно (100% погрешности).

Salamandr
> угол считается относительно чего то. То есть нужно 2 вектора.
Не понял исходной задачи - дисквалификация.

Полярный угол, по общепринятому определению - считается от (1, 0) против часовой стрелки, если что.

Mirrel
> можно взять "два угла" и состряпать из него один.
> cos = b / c
> sin = a / c
> a - противолежащий катет, b - прилежащий катет, c - гипотенуза.
> и потом просто складываем два угла.
Нет чёткой формулы для angle - дисквалификация.

ivashko
> Когда дойдёте до 6го, вам училка расскажет, что по вашим условиям, тангенс -
> это и есть Y разделить на X. А угол этого тангенса можно определить через его
> арктангенс.
Я предполагаю, что ты имеешь в виду angle=atan(y/x).
Даёт неправильный ответ при x<0.
Даёт другой неправильный ответ при x=0.

lookid
> В итоге правильного ответа нет.
"Правильность" - это не бинарная характеристика, а численная оценка. Взяв несколько вариантов, мы можем оценить их по степени правильности и отсортировать в порядке возрастания.
Наиболее правильный, в обозначенных условиях - это #4.

Skvoznjak
Плохая память? Соболезную.

ronniko
> radius = abs(x) + abs(y);
Даёт неправильный ответ практически всегда.

ivashko
> radius = X/abs(cos (A));
Даёт неправильный ответ при x=0.
Питушит ответы, когда abs(x) << abs(y). Например, при (x,y) = (1, 100500.6), правильный метод даёт 100500.6, а твой - 100302.22.

ivashko
> где А = atan(Y/X);
См. выше.

#55
(Правка: 3:14) 3:10, 26 янв 2023

ivashko
> Только MrShoor - единственный, кто заметил ошибку новичка Роннико и деликатно
> намекнул ему, что даскать пост 15 надо бы подправить.
Ещё раз, если тебе нечего добавить к текущему обсуждению, корректный план действий - это не писать ничего. Шур довёл до сведения, что метод Ронники - бред. Повторять то же самое от себя я не вижу смысла. Чего-то нового к этому мне добавить тоже нечего.

Так что, тут ты ошибаешься. Ошибку заметили все (кому надо было). MrShoor - единственный, кто об этом публично написал. А чтобы донести полезную информацию в публичном обсуждении - одного раза достаточно.

ivashko
> Если бы ты знал как работают шейдеры
Я знаю, как работают шейдеры. И привёл конкретную ситуацию, в которой конкретно твой алгоритм обсирается.

ivashko
> У вас слишком мало опыта, чтобы судить о таких вещах.
У тебя слишком мало знаний, чтобы судить о моём опыте в чём бы то ни было.

#56
(Правка: 10:32) 10:31, 26 янв 2023

Имбирная Ведьмочка
я в том же посте написал атан2

зы. фигасе вы тут развели 4 страницы срача

Kripto289
> а сколько корней?
я сильно извеняюсь, но разве тригонометрия считается не через таблицы с интерполяцией? зойчем корни?

Страницы: 1 2 3 4
ПрограммированиеФорумОбщее