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

  • Автор темы Автор темы no_santa
  • Дата начала Дата начала
PHP:
function sinarccos($value) 
{
    global $table;
    $value = (int)($value * 100000);
    $i = $value - ($value % 25);
    return $table[9000 - $i] / 100000;
}

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

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

no_santa, расскажи, всю задачу. потому что элипсы поворачивать будет проще в полярных координатах
 
dimagolov
прочитай внимательно название ключей массива и подумай
 
DiMA, а ты почитай внимательно тему. ищем НЕ КЛЮЧИ, а ЗНАЧЕНИЯ, которые нелинейны.
 
значит надо поменять ключи и значения местами + привести к линейной форме, которая удовлетворяет заданной точности
 
как вариант. но лучше услышать задачу полностью, так как с учетом познаний автора в математике все это может быть и не нужно совсем.
которая удовлетворяет заданной точности
тут есть проблема. в начале интервала (от нуля и до pi/4) sin весьма близок к линейной ф-ии y=x, а вот возле конца (то есть около pi/2) получается почти горизонтальная линия (y=1), то есть для получения вменяемой точности на конце понадобится очень мелкий шаг, который абсолютно не имеет смысла в начале. правда, можно сделать не одну а 3 таблицы с разной точностью и делать аппроксимацию.
 
dimagolov он говорит о куче измерений "в одной сессии".
Так что можно нагенерить таблицу побольше и в нужной точности все решить.
 
Adelf, ты понимаешь, что точность обратной таблицы (sin в индексе и угол в значении) будет сильно различаться на концах интервала? причем в начале интервала она будет избыточной, а в конце недостаточной (относительно) при любом шаге? потому и 3 таблицы.
но у меня есть большие сомнения вообще в нужности такого кол-ва вычислений, поэтому хочется услышать задачу.
 
Да понимаю я. Как выглядит кружочек я еще помню. Просил уже задачу - ТС отказался ее предьявить :)
Аааа :) вспооомнил. no_santa - это же автор мегамеханизма обработки нескольких тысяч картинок, который свой результат сразу же пользователю должен выдать. помню-помню.. Кстати ТС в той теме обещался релиз показать через две недели. Время уже прошло.
 
Автор оригинала: Adelf
Да понимаю я. Как выглядит кружочек я еще помню. Просил уже задачу - ТС отказался ее предьявить :)
Аааа :) вспооомнил. no_santa - это же автор мегамеханизма обработки нескольких тысяч картинок, который свой результат сразу же пользователю должен выдать.
С чего ты взял, что сразу? Там вообще-то очередь...

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

-~{}~ 09.09.09 22:37:

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

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

-~{}~ 09.09.09 22:44:

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

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

Насчет трех таблиц действительно не интересно, ИМХО и одна хороша.
 
Серьёзно? Надо попробовать. :)

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

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