2013-03-28 3 views
0

Это довольно сложно объяснить, поэтому я сделаю все возможное, извините, если есть что-то, что я пропустил, дайте мне знать, и я исправлю это.Соединительные круги в C++/Excel

Мой вопрос, я была поставлена ​​задача сделать эту форму,

Crescent Moon http://www.learnersdictionary.com/art/ld/crescent.gif

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

Важные детали.

пользовательского ввода - Center Point (X, Y), число точек, которые будут показаны, размер шрифта (радиус влияния)

Выход - Список координат по форме.

Общая цель, когда у меня есть баллы, заключается в том, чтобы поместить их в график на Excel, и мы надеемся нарисовать его для меня, при введенном пользователем размере!

Я знаю, что максимальный радиус составляет 165 мм, а минимальный - 35 мм. Я решил, что моя база [Размер шрифта] [1] будет равна 20. Затем я подумал и придумал уравнение.

Радиус = (Выбранный размер шрифта/20) * 130. Это просто оценка, я понимаю, что это, вероятно, не так, но я думал, что она может работать как минимум в виде шаблона.

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

* (Я знаю, что это не так, как на картинке, просто моя цепочка мыслей, так как она все равно будет иметь одинаковую форму)

Итак, я определил вторую центральную точку как (X + 4, Y). (Опять же, просто оценка, подумал, что не имеет значения, насколько они далеко друг от друга).

Я тогда решил Radius 2 = (Chosen Размер шрифта/20) * 165 (макс радиус)

Итак, у меня есть 2 Радиусы, и две центральные точки.

Это мой код до сих пор (это работает, и все декларируется/введенный выше)

for(int i=0; i<=n; i++) //output displayed to user 
{           
Xnew = -i*(Y+R1)/n; //calculate x coordinate 
Ynew = pow((((Y+R1)*(Y+R1)) - (Xnew*Xnew)), 0.5); //calculate y coordinate 

И

for(int j=0; j<=n; j++)//calculation for angles and output displayed to user 
{ 
Xnew2 = -j*(Y+R2)/((n)+((0.00001)*(n==0))); //calculate x coordinate 
Ynew2 = Y*(pow(abs(1-(pow((Xnew2/X),2))),0.5)); 
if(abs(Ynew2) <= R1) 
    cout<<"\n("<<Xnew2<<", "<<Ynew2<<")"<<endl; 

Я имею проблему рисования серп, что я не могу получить два круга имеют ту же начальную точку?

Мне удалось получить результаты в Excel. Все в этом отношении работает. Но когда я рисую точки на графике в Excel, у них нет одинаковых отправных точек. Его по существу всего две половины окружности, одна меньше, чем другая (Остановка на оси Y, дающая полуплоскость).

Если это имеет смысл, я пытаюсь получить две части кругов, чтобы нарисовать форму так, чтобы они имели одинаковые начальные и конечные точки.

Если у кого-то есть предложения по тому, как это сделать, было бы здорово, в настоящее время все, что я получаю более «наполовину пончик», из-за того, что круги не связаны.

So. Есть ли у кого-нибудь какие-либо подсказки/советы/ссылки, которые они могут поделиться со мной о том, как это исправить?

Еще раз спасибо за любые проблемы с вопросом, извините, сделаю все возможное, чтобы исправить, если вы дадите мне знать.

Приветствия

ответ

0

формульных точек на окружности:

(x-h)^2+(y-k)^2=r^2 

The center of the circle is at (h/k) 

Решение для у

2y1 = k +/- sqrt(-x^2 + 2hx +r^2 - h^2) 

Так что теперь, если внутренний круг имеет свой центр @h/k, полумесяц будет начать @ ч и растянуться до h - r2

Теперь вам необходимо решить формулу конечной точки для внутреннего круга и круга наружу и построить его. На x вы должны получить 4 балла (решить уравнение два раза, каждый с двумя решениями)

Я не реализовал его, но это было бы моим поездом ...

Смежные вопросы