Нужна помощь в написании кода "Цилиндрическая винтовая линия" Цилиндрическая винтовая линия.
Я, мягко говоря, слабоват в математике. Поэтому не могу сообразить.
Язык кода, в принципе любой.
Цилиндрическая винтовая линия
Сообщений 1 страница 6 из 6
Поделиться12016-04-15 09:06:22
Поделиться22016-04-18 18:26:14
Все просто - x=r*cos(phi), y=r*sin(phi), z= phi, 0<=phi<2*pi
Поделиться32016-04-24 03:28:17
Все просто - x=r*cos(phi), y=r*sin(phi), z= phi, 0<=phi<2*pi
Это же формула. А как её описать, вернее расписать в программе.
Поделиться42016-07-23 03:56:27
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;
Есть такой код. Это создание точкой окружностей.
Создать винтовую линию не могу. Не могу сообразить как.
Отредактировано tonline_kms65 (2016-07-23 04:04:20)
Поделиться52016-07-25 11:57:39
Любая линия определяется некоторым параметром, здесь таким параметром может быть 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 - шаг вдоль линии
Поделиться62017-06-18 13:13:23
Любая линия определяется некоторым параметром, здесь таким параметром может быть 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)