Моя функция логарифмической спирали вычисляется неправильно

Я не был так уверен, где задать этот вопрос (между математикой и здесь)

Я пытаюсь нарисовать логарифмическую спираль, используя эту формулу

введите здесь описание изображения

Это работает (хорошо, на экране отображается спираль), но когда я меняю шаг (а), спираль не меняет свой шаг, а только вращение и размер (и установка значения 1 должна сделать круг, но это не так)

я пробовал те:

double step = (end - start) / sample;
        for (int i = 1;i <= sample;i++) {
            double t = start+i*step;
            coordinates[i-1][0] =  a * Math.pow(Math.E,b*t) * Math.cos(t);
            coordinates[i-1][1] = a * Math.pow(Math.E,b*t) * Math.sin(t);
}

(a и b постоянны, начало = -4*PI, конец = 4*PI)

и

    double step = (end - start) / sample;
        for (int i = 1;i <= sample;i++) {
            double r = start+i*step;
        double t = (1/b)*Math.log(r/a);
            coordinates[i-1][0] = r* Math.cos(t);
            coordinates[i-1][1] = r* Math.sin(t);
}

(a и b постоянны, начало = 0, конец = 10)

Я предполагаю, что сделал большую ошибку в формуле, но я не вижу, какую именно. Я могу предоставить выходную картинку, если это может помочь, но я не понимаю, как

Редактировать: мне удалось заставить его работать, используя r = a exp (θ кроватка b)

    double r = Math.pow(a,t*(1/Math.tan(b)));

Но я до сих пор не понимаю, почему другая формула не сработала, поэтому я отредактировал этот вопрос, а не ответил на него.


person eephyne    schedule 21.01.2013    source источник


Ответы (1)


Я предполагаю, что происходит проблема округления. Я предполагаю, что и «a», и «b» являются двойными... Я должен спросить, поскольку это не написано в коде, но предполагаю, что это так. Если нет, то это проблема :)

Затем я бы посмотрел на i * step и убедился, что это то, что вы ожидаете ... Я бы подумал, что это нормально, но вы не приводите int 'i' к двойному, поэтому спрашиваете о проблемах, если вы перетасовываете части .

Аааа, на самом деле я бы хотел посмотреть на «образец». Если это int, как я ожидаю, это даст вам неправильный результат для шага, так как вы делите на int, который, как я ожидаю, даст возвращаемое значение int... на самом деле моя ставка 1p находится на его образце, объявленном как внутр.

Если это не поможет, вы можете распечатать значение шага и убедиться, что оно соответствует вашим ожиданиям, а также проверить правильность расчета «t», если проблема не в этом примере.

person sradforth    schedule 21.01.2013
comment
«a», «b», «start» и «end» были двойными. "образца" не было. Я пытался сделать sample a double , но это ничего не меняет. Когда я смотрю на значение t, оно выглядит нормально (от -4 * PI до 4 * PI) - person eephyne; 22.01.2013