Тригонометрия

Adelf

Administrator
Команда форума
PHP:
function sinarccos($value) 
{
    global $table;
    $value = (int)($value * 100000);
    $i = $value - ($value % 25);
    return $table[9000 - $i] / 100000;
}
ну еще проверку надо бы добавить на правильность диапазона.
 

SiMM

Новичок
А зачем умножать на сто тысяч, если интересуют лишь каждое 25е значение индекса?
 

dimagolov

Новичок
Adelf, ты о чем? аргументом идет не индекс в таблице, а значение в ней. а ф-я санты использует тот факт, что sin(x)=cos(pi/2+x), аргументом значение cos

DIMA, а расскажи, как в одну строчку искать нелинейное значение в таблице.

no_santa, расскажи, всю задачу. потому что элипсы поворачивать будет проще в полярных координатах
 

DiMA

php.spb.ru
Команда форума
dimagolov
прочитай внимательно название ключей массива и подумай
 

dimagolov

Новичок
DiMA, а ты почитай внимательно тему. ищем НЕ КЛЮЧИ, а ЗНАЧЕНИЯ, которые нелинейны.
 

DiMA

php.spb.ru
Команда форума
значит надо поменять ключи и значения местами + привести к линейной форме, которая удовлетворяет заданной точности
 

dimagolov

Новичок
как вариант. но лучше услышать задачу полностью, так как с учетом познаний автора в математике все это может быть и не нужно совсем.
которая удовлетворяет заданной точности
тут есть проблема. в начале интервала (от нуля и до pi/4) sin весьма близок к линейной ф-ии y=x, а вот возле конца (то есть около pi/2) получается почти горизонтальная линия (y=1), то есть для получения вменяемой точности на конце понадобится очень мелкий шаг, который абсолютно не имеет смысла в начале. правда, можно сделать не одну а 3 таблицы с разной точностью и делать аппроксимацию.
 

Adelf

Administrator
Команда форума
dimagolov он говорит о куче измерений "в одной сессии".
Так что можно нагенерить таблицу побольше и в нужной точности все решить.
 

dimagolov

Новичок
Adelf, ты понимаешь, что точность обратной таблицы (sin в индексе и угол в значении) будет сильно различаться на концах интервала? причем в начале интервала она будет избыточной, а в конце недостаточной (относительно) при любом шаге? потому и 3 таблицы.
но у меня есть большие сомнения вообще в нужности такого кол-ва вычислений, поэтому хочется услышать задачу.
 

Adelf

Administrator
Команда форума
Да понимаю я. Как выглядит кружочек я еще помню. Просил уже задачу - ТС отказался ее предьявить :)
Аааа :) вспооомнил. no_santa - это же автор мегамеханизма обработки нескольких тысяч картинок, который свой результат сразу же пользователю должен выдать. помню-помню.. Кстати ТС в той теме обещался релиз показать через две недели. Время уже прошло.
 

no_santa

Снегур
Автор оригинала: Adelf
Да понимаю я. Как выглядит кружочек я еще помню. Просил уже задачу - ТС отказался ее предьявить :)
Аааа :) вспооомнил. no_santa - это же автор мегамеханизма обработки нескольких тысяч картинок, который свой результат сразу же пользователю должен выдать.
С чего ты взял, что сразу? Там вообще-то очередь...

Автор оригинала: Adelf
помню-помню.. Кстати ТС в той теме обещался релиз показать через две недели. Время уже прошло.
Да страшно уже! Ты так настойчиво выспрашиваешь... наверное неспроста? ;)

-~{}~ 09.09.09 22:37:

Автор оригинала: DiMA
> Ну не знаю...

Я не высказывал предположений. Я тебе сказал, что в твоем говнокоде цикл не нужен, чтобы найти по входному аргументу значение. И это не касается рассуждений - что лучше: таблица или вычисления на ходу.
Было-бы достойно с твоей стороны пояснить, что-же говенного в моем (даром что в приведенном варианте - тестовом) коде. И наоборот :)
Сейчас уже выснилось, что таблица на порядок быстрее, и дискретизация достаточная.
А еще ты так и не ответил, как-же более оптимально найти значение по входному аргументу? Или сам не знаешь? :)

-~{}~ 09.09.09 22:44:

Автор оригинала: dimagolov
no_santa, расскажи, всю задачу. потому что элипсы поворачивать будет проще в полярных координатах
Изначально от функции требовалось как можно быстрее и дешевле выдать синус от арккосинуса, а также угол в градусах (именно число в градусах необходимо для дальнейшей обработки). Диапазон - четвертушка.

С помощью входного и выходного коэффициентов придается эллипсообразный вид.
Собственно, есть задача этот воображаемый эллипс вращать. Это можно делать уже в радианах. Вот только никак не соображу, как тут сделать фазовый сдвиг... На ум приходит сделать буквально простое смещение по таблице на выдаче по граничным условиям... Но подозреваю, что это не лучшая идея.

Насчет трех таблиц действительно не интересно, ИМХО и одна хороша.
 

no_santa

Снегур
Серьёзно? Надо попробовать. :)

Почему-то думал, что цикл на целочисленных переменных в максимальную длину 359 шагов - нормальное решение, если только нельзя сделать что-то более красивое, пользуясь лингвистикой языка.

Но даже и здесь можно поизвращаться - вместо трех таблиц делать все-таки одну, но с условием для входного значения, и если оно больше полкорня из двух - искать с обратного направления :)
 
Сверху