График в полярной системе координат

Рейтинг: 0Ответов: 2Опубликовано: 04.03.2011

Есть процедура, которая рисует график параметрической функции в декартовой системе. Подскажите, как переделать для полярной системы.

procedure paint_graphics(x0,y0,mx,my:integer);
const
    t_start=0;
    t_end=20;
    dt=0.01;
var
    t,x,y:real;
    xe,ye:integer;
begin
    t:=t_start;
    repeat
        x:=f(t);
        y:=g(t);
        xe:=trunc(x0+x*mx);
        ye:=trunc(y0-y*my);
        PutPixel(xe,ye,5);
        t:=t+dt;
    until t>t_end;
end;

хе,уе - перевод в экранные координаты. х0,у0 - центр. t изменяется от 0 до 20. мх, му - масштаб по оси х и у.

Может кто сталкивался?

Сейчас рисуется так:

1

А нужно так:

2

Вот сами функции:

const
gradus = 0;
theta = Pi / 180 * gradus;

function f(t:real):real;
begin
    f:=cos(2*t)*cos(theta)-t*sin(theta);
end;

function g(t:real):real;
begin
    g:=t*cos(theta)+sin(t)*sin(theta);
end;

Ответы

▲ 3Принят

Вам нужно перед выводом перевести полярные координаты в декартовы и по ним уже рисовать.

Координаты полярной системы:

r - длина радиус вектора, theta - угол между вектором и осью абсцисс (коя Х).

Перевод в декартовы:

x = r * cos(theta)
y = r * sin(theta)

Собственно, всё.

К слову, ваша функция f(t) возвращает радиус (вычисляемый по формуле cos(2*t)), а g(t) возвращает угол (формула проще: t).

▲ 2

Если я правильно понял, то нужно преобразовать код так? (пока проверить нет возможности)

 procedure paint_graphics(x0,y0,mx,my:integer);
    const
    t_start=0;
    t_end=20;
    dt=0.01;
var
    t,x,y,r,phi:real;
    xe,ye:integer;
begin
    t:=t_start;
    repeat
        r:=f(t);
        phi:=g(t);

        x:=r*cos(phi); { Добавил }
        y:=r*sin(phi); { Добавил }

        xe:=trunc(x0+x*mx);
        ye:=trunc(y0-y*my);
        PutPixel(xe,ye,5);
        t:=t+dt;
    until t>t_end;
end;