Компьютерная графика

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Компьютерная графика » Программирование графики и GPU » Цилиндрическая винтовая линия


Цилиндрическая винтовая линия

Сообщений 1 страница 6 из 6

1

Нужна помощь в написании кода "Цилиндрическая винтовая линия"  Цилиндрическая винтовая линия.
Я, мягко говоря, слабоват в математике. Поэтому не могу сообразить.
Язык кода, в принципе любой.

0

2

Все просто - x=r*cos(phi), y=r*sin(phi), z= phi, 0<=phi<2*pi

0

3

Steps3D написал(а):

Все просто - x=r*cos(phi), y=r*sin(phi), z= phi, 0<=phi<2*pi

Это же формула. А как её описать, вернее расписать в программе.

0

4

while (angle <= 2 * PI)
    {
        x = radius * Cosine(angle);
        y = radius * Sine(angle);

       
        pos1[0][0] = vecLocation[0];
        pos1[0][1] = vecLocation[1] + x;
        pos1[0][2] = vecLocation[2] + y;
         
        pos1[1][0] = vecLocation[0] + x;
        pos1[1][1] = vecLocation[1];
        pos1[1][2] = vecLocation[2] + y;
         
        pos1[2][0] = vecLocation[0] + (x*DegToRad(45.0));
        pos1[2][1] = vecLocation[1] + (x*DegToRad(45.0));
        pos1[2][2] = vecLocation[2] + y;
         
        pos1[3][0] = vecLocation[0] + (x*DegToRad(45.0));
        pos1[3][1] = vecLocation[1] - (x*DegToRad(45.0));
        pos1[3][2] = vecLocation[2] + y;

Есть такой код. Это создание точкой окружностей.

http://s3.uploads.ru/sdGHj.jpg

Создать винтовую линию не могу. Не могу сообразить как.

Отредактировано tonline_kms65 (2016-07-23 04:04:20)

0

5

Любая линия определяется некоторым параметром, здесь таким параметром может быть z.
А для х и у просто используется уравнение окружности, смещая при этом z

Нужно что-то вроде
for ( float phi = ; phi < 2*M_PI; phi += delta )
{
  pos [index].x = radius * sin ( phi );
  pos [index].y = radius * cos ( phi );
  pos [index].z = phi * scale;
  index++;
}

Это сделает один оборот линии, если нужно несколько - цикл не до 2*M_PI,а до большекго значения
При этом получается  цилиндлрическая линия вдоль Oz с радиусом radius
delta - шаг вдоль линии

0

6

Steps3D написал(а):

Любая линия определяется некоторым параметром, здесь таким параметром может быть z.
А для х и у просто используется уравнение окружности, смещая при этом z

Нужно что-то вроде
for ( float phi = ; phi < 2*M_PI; phi += delta )
{
  pos [index].x = radius * sin ( phi );
  pos [index].y = radius * cos ( phi );
  pos [index].z = phi * scale;
  index++;
}

Это сделает один оборот линии, если нужно несколько - цикл не до 2*M_PI,а до большекго значения

При этом получается  цилиндлрическая линия вдоль Oz с радиусом radius
delta - шаг вдоль линии

О. Интересно.
Я прошу прощения что не отвечал долго. Думал никто не ответит.
Я эту проблему пока забросил, занимался этой, вроде удачно решил.
Хочу снова этой темой заняться. Спасибо за ответ!

У меня сразу кучка вопросов появилась. Я сейчас пока поэксперементирую, потом напишу свои вопросы.
Сразу первый вопрос - чему будет равно это значение  2*M_PI и почему оно умножено на 2?
Я понимаю что это расстояние до конечной точки, но почему умножено на 2 не могу понять.
Например двигаю сущность ent

int step = 1;  // шаг
int radius = 10;  // радиус
float pos[3]:

GetEntPropVector(ent, Prop_Send, "m_vecOrigin",   pos);   //начальная позиция ent

for ( i = 0; i < 2*M_PI; i+= step){
pos[0] = radius * sin(i);
pos[1] = radius * cos(i);
pos[2] = i * scale;   // ? здесь непонятно
}

Что такое scale? Я понимаю это есть значение шага - смещение step?

Отредактировано tonline_kms65 (2017-06-18 13:38:41)

0


Вы здесь » Компьютерная графика » Программирование графики и GPU » Цилиндрическая винтовая линия


создать форум