Нарисуйте квадрат с полярными координатами - PullRequest
7 голосов
/ 25 января 2011

У меня есть квадрат, где самые близкие точки находятся на расстоянии 1 единицы от центра.Смотрите мою диаграмму ascii ниже:

+-----------+
|           |
|  x        |
|-----+     |
|           |
|           |
+-----------+

Следовательно, расстояние от начала координат до углов - это sqrt (2).Мне нужна функция, которая возвращает расстояние от начала координат до точки на квадрате под любым углом.Например, для входа 0 функция вернет 1. Для входа 45 функция вернет расстояние до угла, квадратный корень из 2. Затем для 90 она снова вернет 1.

Другими словами, когда вы отображаете функцию с помощью полярной графики, она нарисует квадрат.

Я считаю, что функция будет выглядеть примерно так:

f(x) = sqrt(tan(x)^2+1)

ЕдинственноеПроблема в том, что функция выше не будет отображать грани сторон квадрата.Мне нужно что-то, что рисует все 4 стороны.

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

Любая помощь будет оценена.Заранее спасибо.

Ответы [ 4 ]

9 голосов
/ 25 января 2011

Это было бы быстрее, я думаю:

function getLengthForDeg(phi){
    phi = ((phi+45)%90-45)/180*Math.PI;
    return 1/Math.cos(phi);
}
1 голос
/ 20 марта 2014

Я недостаточно знаком с Javascript, но в формате, используемом в Wolfram Alpha, формула для радиуса от угла:

min (1 / abs (cos (theta)), 1/ абс (грех (тета))))

1 голос
/ 05 ноября 2012

Исходное сообщение помечено Javascript, но мне это нужно для типизированных языков (например, C), где вы не можете смоделировать число с плавающей запятой.

Ответ MonoMano является правильным, но для всех, кто сюда приходит, нуждается в том жеВот ответ MonoMano, модифицированный для C / ObjC / Java / etc:

/** c.f. http://stackoverflow.com/a/4788992/153422
* M_PI_2 is a constant: "PI / 2"
* M_PI_4 is a constant: "PI / 4"
*/
double getSquarePolarRadiusForRad(double phi){
    double phiInPiBy4Range = phi;
    while( phiInPiBy4Range > M_PI_4 )
        phiInPiBy4Range -= M_PI_2;
    while( phiInPiBy4Range < - M_PI_4 )
        phiInPiBy4Range += M_PI_2;

    return 1/cos(phiInPiBy4Range);
}
1 голос
/ 10 мая 2012

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

r = (((s*sqrt(2)) - 5)/4) sin(4(x - (pi/8)) + (((s*sqrt(2)) + s)/4)

где s - длина стороны желаемого квадрата

Установить тетаперейдите к pi / 4, чтобы построить основные точки, необходимые для создания изображения квадрата

Опять же, это работает с калькуляторами TI.

...