Смещение Polar Rose 2D

У меня возникли проблемы с попыткой построить полярную розу со смещением C уравнения
r (theta) = cos (k * theta) + C. Я пытаюсь построить эту полярную розу:
http://en.wikipedia.org/wiki/Polar_coordinate_system#/media/File:Cartesian_to_polar.gif

Полярное уравнение может быть:
r (theta) = cos (k * theta)
или
r (theta) = sin (k * тета)

Я хочу нарисовать уравнение полярной розы:
r (theta) = 2 + sin (6 * theta)

Хорошо, и параметрические уравнения будут такими:
x = C + sin (k * theta) * cos (theta)
y = C + sin (k * theta) * sin (theta)

На моем холсте (область рисования) моя точка отсчета находится не в центре экрана, поэтому мне нужно перевести на нее розу. Хорошо, ничего страшного. Другой момент заключается в том, что мне нужно масштабировать розу, чтобы она была видна, иначе она будет слишком маленькой, но все же без проблем, это объясняет: 100 *. Вот мой код, он написан на C ++, кстати:

for ( float t = 0; t < PI_2; t+= 0.01 )
{
    r = Origin.get_x() + 100*(2+(sin(6*t) * cos(t)));
    h = Origin.get_y() + 100*(2+(sin(6*t) * sin(t)));
    point(r,h);
}

Я знаю, что делаю это неправильно, потому что, когда я добавляю +2, который должен быть константой C, работает не так, как я хочу, он просто переводит больше и рисует полярную розу без смещения. Как предотвратить "лишний перевод" и правильно его нарисовать?


person Vinícius Pacheco Vieira    schedule 12.04.2015    source источник


Ответы (1)


x = r cos(theta), y = r sin(theta), поэтому ваши параметрические уравнения должны быть x(theta) = C * cos(theta) + sin(k*theta) * cos(theta) и y(theta) = C * sin(theta) + sin(k*theta) * sin(theta). Вы просто забыли умножить C на cos(theta) и sin(theta) соответственно.

person Edward Doolittle    schedule 12.04.2015
comment
Большое спасибо! : D Извините, но у меня недостаточно репутации, чтобы проголосовать за ваш ответ, есть ли способ назвать его правильным? - person Vinícius Pacheco Vieira; 12.04.2015