Как я могу получить точку на спирали с заданными градусами вращения?

Самое близкое, что я нашел, чтобы помочь объяснить, что мне нужно, находится здесь, в этом вопросе: равноудаленные точки на спирали

Однако это не совсем то, чего я хочу.

The spiral to draw is an archimedean spiral and the points obtained must be equidistant from each other. (Цитата: из вопроса, связанного выше.)

Это именно то, что я хочу, учитывая уравнение спирали Архимеда, equation.

Существует определенный набор данных, которые пользователь может вводить, они основаны НЕ на спиралях, а на круглых фигурах в целом. Они следующие: центральная точка [X,Y,Z], радиус, горизонтальное разделение [может называться разделением по X, зависит от рисунка] и вертикальное разделение [можно называться разделением по Y, зависит от рисунка] и, самое главное, градусы. вращения. Я бы хотел, чтобы горизонтальное разделение было расстоянием между последовательными точками, поскольку они должны быть на одинаковом расстоянии друг от друга. Я также хотел бы, чтобы вертикальное разделение было расстоянием между «параллельными» кривыми.

Итак, учитывая этот конкретный входной выбор (и да, некоторые из них можно игнорировать), как я могу выполнить итерацию по всем последовательным равноудаленным точкам, которые потребуются для достижения входных степеней (которые могут быть очень большими, но конечными) и вернуть X и точка Y каждой точки этих точек?

В основном то, что я пытаюсь достичь, - это цикл от нуля до количества градусов во входных данных, учитывая все остальные входные данные и мои предпочтения, отмеченные выше, и рисование точки для всех равноудаленных последовательных точек (если вы решили представить с помощью кода, просто представьте рисунок с помощью «печати»).

Мне трудно объяснить, но я думаю, что я довольно много понял. Точки на этом графике именно то, что мне нужно:

введите здесь описание изображения


person Corey Iles    schedule 24.11.2015    source источник
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что это не вопрос программирования. Это, возможно, подошло бы по математике.SE.   -  person Carey Gregory    schedule 25.11.2015
comment
Это очень специфично для программирования. Если бы я делал это для математики, я бы уже знал, как построить график. Мне просто нужно иметь возможность пройти через точку в моей программе.   -  person Corey Iles    schedule 25.11.2015
comment
@CoreyIles, где твой код?   -  person Seth Kitchen    schedule 25.11.2015
comment
У меня есть только код для спирали. Я понятия не имею, с чего начать эту спираль (ну, кроме названия функции). Я попытался преобразовать код из этой ссылки, чтобы сделать то, что мне нужно, но я не могу заставить его работать должным образом.   -  person Corey Iles    schedule 25.11.2015
comment
@CoreyIles Тогда ваши вопросы сводятся к Дайте кодез вопрос.   -  person Carey Gregory    schedule 25.11.2015
comment
Вероятно, вам нужно показать нам какой-нибудь код, по крайней мере, с ожидаемыми входными и выходными данными. Потому что, читая ваш вопрос, если у вас есть формула $ r = a + b \ theta $, вы можете просто использовать ее для расчета / построения точек. Если вам нужна восходящая спираль, просто добавьте координату $z$ (подойдет что-то вроде $z\propto\theta$).   -  person CompuChip    schedule 25.11.2015
comment
@CareyGregory Я не прошу кого-то дать мне код, мне нужна помощь.   -  person Corey Iles    schedule 25.11.2015
comment
@CompuChip Я попытаюсь привести пример.   -  person Corey Iles    schedule 25.11.2015
comment
Я второй комментарий CompuChips. Пример in value =› out values, без всех общих и расплывчатых разговоров о спиралях и прочем, очень помог бы.   -  person deviantfan    schedule 25.11.2015
comment
Я уже дал входы и выходы хотя. Но да, я знаю, что код будет иметь больше смысла.   -  person Corey Iles    schedule 25.11.2015
comment
Как мы можем помочь вам, не просто делая работу за вас? Вы прочитали вопрос и ответ, на который я вас связал?   -  person Carey Gregory    schedule 25.11.2015
comment
Да, я понимаю, но я не ожидаю, что мне просто скинут код и не объяснят его. Им не нужно объяснять математику, только общую идею или то, что, по их мнению, необходимо объяснить. Если они вообще ничего не объясняют, это нормально, но это не поможет мне так сильно, как объяснение.   -  person Corey Iles    schedule 25.11.2015
comment
Приведенный вами график, который соответствует «именно тому, что вам нужно», проще, чем вы думаете, - участки дуги между точками имеют постоянную длину. С горизонтальным и вертикальным разделением ничего сложного не происходит.   -  person RPM    schedule 25.11.2015
comment
Горизонтальные и вертикальные расстояния между точками на вашем графике непостоянны (даже при вращении - вы можете сказать, потому что они не образуют квадратную/прямоугольную/ромбовидную сетку) - и я не думаю, что было бы возможно найти решение, где они постоянны. Возможно, вы сможете найти решение, в котором расстояние между точками постоянно...   -  person RPM    schedule 25.11.2015
comment
Вы говорите не спираль, но ваша диаграмма похожа на спираль. Какие тогда уравнения? Расшифруйте каждый термин, который вы используете. X, y, z означают, что вы хотите 3D? Что определяет последовательный и равноудаленный для ваших целей? Вы определяете термины, не обеспечивая конкретных связей между ними (например, конкретных уравнений). Что вычисляется в каком порядке? Как вы думаете, какие функции вам нужны? Круглые фигуры вообще? Вы имеете в виду параллельные окружности разного радиуса? Если бы это было 3D, выглядело бы это как конические срезы?   -  person Craig Estey    schedule 25.11.2015
comment
You might be able to find a solution where the distance between points is constant Вот чего я хочу.   -  person Corey Iles    schedule 25.11.2015
comment
@CraigEstey Я никогда не говорил не спираль.   -  person Corey Iles    schedule 25.11.2015
comment
У вас есть уравнение спирали. Если вы можете математически сформулировать свое «равноудаленное» требование, вы потенциально можете получить некоторое представление, рассматривая их как набор одновременных уравнений.   -  person RPM    schedule 25.11.2015
comment
If you can mathematically formulate your 'equidistant' requirement Именно по этому поводу и прошу помощи, просто не придумал, как это объяснить.   -  person Corey Iles    schedule 25.11.2015
comment
Вы сказали: существует определенный набор данных, которые пользователь может вводить, они основаны НЕ на спиралях, а на круглых фигурах в целом. Но, остальное все еще держится. И вы говорите 2D или 3D? Итак, я полагаю, вам нужна трехмерная спираль? Ах! Теперь мы получаем где-то. Если вы еще не можете определить равноудаленность, добавьте определения/уравнения для других частей, которые вы можете. Это может помочь с моментом ага   -  person Craig Estey    schedule 25.11.2015
comment
Программа не предназначена для спиралей. Это для многих разных фигур, которые используют один и тот же вход. Я никогда не говорил, что вопрос не относится к спиралям. Вопрос также, очевидно, для 2D, поэтому я прошу только X и Y. Преобразование его в 3D будет таким же простым, как постоянное увеличение Z.   -  person Corey Iles    schedule 25.11.2015
comment
Я прямо процитировал ваш пост о не. Итак, у вас есть несколько фигур, одна из которых представляет собой 2D-спираль. Итак, вам понадобится функция генератора для этого. Вам также понадобятся другие подобные функции для различных форм, которые вы хотите. Скажем, у вас есть 10 разных форм, вам понадобится 10 функций. Но, каковы некоторые примеры форм? Можете ли вы упомянуть несколько?   -  person Craig Estey    schedule 25.11.2015
comment
@RPM «Последний». И я бы предпочел, чтобы расстояние измерялось по спирали, но и то и другое нормально.   -  person Corey Iles    schedule 25.11.2015
comment
@CraigEstey Все остальные мои фигурки уже готовы. Они не имеют никакого отношения к этой ситуации. Но это: сфера, цилиндр (который, поскольку я отображаю только вершины, также может считаться призмой), спираль, вихрь (который в моем случае представляет собой просто «бревенчатую» спираль), круг и конус (который является просто цилиндр с уменьшающимся радиусом, было бы намного лучше использовать спираль из этого вопроса).   -  person Corey Iles    schedule 25.11.2015


Ответы (1)


Предполагая двумерный случай и архимедову спираль с центром вокруг нуля (a=0), поэтому с уравнением r=  а\тета. Последовательные строки затем 2\pi bдруг от друга, чтобы получить «вертикальный интервал» v, установите b=v/(2\pi).

Длина дуги от центра до точки под заданным углом определяется Wolfram, но с его решением трудно работать. Вместо этого мы можем приблизить длину дуги (используя очень грубую аппроксимацию для больших тета) до s=0.5  *тета^2. Перестановка, s=sqrt(s/b), позволяющая нам чтобы определить, какие углы соответствуют желаемому «горизонтальному интервалу». Если этого приближения недостаточно, я бы посмотрел на использование чего-то вроде Ньютона-Рафсона. Вопрос, на который вы ссылаетесь, также использует приближение, хотя и не такое же.

Наконец, учитывая, что полярные координаты r=b\thetaпереводятся в декартовы координаты следующим образом: x=b*theta*cos(theta); y=b*theta*sin(theta).

Я получаю следующее:

Спираль!

Это генерируется следующим кодом MATLAB, но он должен быть достаточно простым для перевода на C++, если это то, что вам действительно нужно.

% Entered by user
vertspacing = 1;
horzspacing = 1;
thetamax = 10*pi;

% Calculation of (x,y) - underlying archimedean spiral.
b = vertspacing/2/pi;
theta = 0:0.01:thetamax;
x = b*theta.*cos(theta);
y = b*theta.*sin(theta);

% Calculation of equidistant (xi,yi) points on spiral.
smax = 0.5*b*thetamax.*thetamax;
s = 0:horzspacing:smax;
thetai = sqrt(2*s/b);
xi = b*thetai.*cos(thetai);
yi = b*thetai.*sin(thetai);
person RPM    schedule 25.11.2015
comment
Это в значительной степени то, что я сказал, что мне нужно, поэтому я приму это. - person Corey Iles; 25.11.2015