Войти
ПрограммированиеФорумФизика

В чём измеряются углы в полярных координатах? (2 стр)

Страницы: 1 2
#15
21:33, 19 июня 2009

Патч :)

В общем, к тому и пришли - основной цикл - это цикл по полному витку, а внутренний - прорисовывает этот виток. Только проблема пока что в том, что не допру как именно увеличивать расстояния.

Пока что у меня вот такая картина, скриншот: http://s50.radikal.ru/i129/0906/51/08c18a30c2a3.png

вот такие строчки пробовал:
R += 0.0001; // картинка слева
R += 0.001; // картинка справа (на скриншоте)

Но как сделать так, чтобы терь и радиус вектор двигался тоже равномерно?? :D :D Не одно криво, так другое :))

Терь встаёт следующий вопрос - как перевычислять R? :)))

-------------------------------------------------------------------
double L = 0.01;
double R = 0.01;

for( int i = 0; i < currSliderValue; i += 1 ) { // количество витков

  double gradusAngle = ( L * 180 ) / ( M_PI * R );
  double radianAngle = gradusAngle * ( M_PI / 180 );

  printf( "%i: radianAngle = %f, gradusAngle = %f\n", i, radianAngle, gradusAngle );

  for( double i2 = 0; i2 < 2 * M_PI; i2 += radianAngle ) {

    double x = R * cos( i2 );
    double y = R * sin( i2 );

    int rnd1 = int( ( double( rand() ) / RAND_MAX ) * 255 );
    int rnd2 = int( ( double( rand() ) / RAND_MAX ) * 255 );
    int rnd3 = int( ( double( rand() ) / RAND_MAX ) * 255 );

    glColor3ub( rnd1, rnd2, rnd3 );
    glVertex2f( x, y );

    // R += 0.0001; // картинка слева
    R += 0.001; // картинка справа (на скриншоте)

  }

}
-------------------------------------------------------------------


#16
23:48, 20 июня 2009

Если R сделать таким:
R = ( L / ( 2 * M_PI ) ) * i * 5 + ( i2 * ( L / 4.4 ) );
то получается именно то, что мне надо. 4.4 - просто подобрал в ходе экспериментов :)

#17
7:59, 21 июня 2009

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

double R = 0.01;
double L = R/10;

do {

  gradusAngle = ( L * 180 ) / ( M_PI * R );
  radianAngle = gradusAngle * ( M_PI / 180 );

  i2+= radianAngle;

    x = R * cos( i2 );
    y = R * sin( i2 );

    rnd1 = int( ( double( rand() ) / RAND_MAX ) * 255 );
    rnd2 = int( ( double( rand() ) / RAND_MAX ) * 255 );
    rnd3 = int( ( double( rand() ) / RAND_MAX ) * 255 );

    glColor3ub( rnd1, rnd2, rnd3 );
    glVertex2f( x, y );

    R += 0.001; //-сюда новомодную формулу для R можно поставить

  } until R>400;

#18
19:44, 21 июня 2009

Не очень понял фразу.. :) а также почему "если радиус увеличится намного в течение одного витка".. В следствии чего такое может произойти? Вроде если сейчас рисуется.. чего может далее изменится? Радиус по формуле потом ведь пересчитывается..

#19
23:04, 21 июня 2009

просто в твоей формуле угол приращения рассчитывается 1 раз за виток. А радиус меняется постоянно, следовательно шаг будет увеличиваться при изменении угла от 0 до 360.

#20
19:56, 22 июня 2009

А.. теперь понял о чём ты. Спасибо за корректировку кода!

#21
2:56, 23 июня 2009

Удивительно, но я снова подобрал нужную формулу к наращению R. Метод называется - метод научного тыка :D

Вот она теперь какая:
R += ( L / ( 2 * M_PI ) ) * radianAngle;

PS тьфу ты блин.. это получилась http://ru.wikipedia.org/wiki/Архимедова_спираль :D
Ну да, я переодически и посматривал на эти формулы :)

Страницы: 1 2
ПрограммированиеФорумФизика

Тема в архиве.