用C ++ / Excel连接圆圈

时间:2013-03-28 12:02:48

标签: c++

解释起来相当复杂,所以我会尽力而为,如果有什么我错过了对不起,请告诉我,我会纠正它。

我的问题是,我的任务是画出这种形状,

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

这是使用C ++来编写将计算此形状上的点的代码。

重要细节。

用户输入 - 中心点(X,Y),要显示的点数,字体大小(影响半径)

输出 - 形状上的坐标列表。

总体目标一旦得到点就是将它们放在Excel上的图形中,它将有希望以用户输入的大小为我绘制它!

我知道最大半径为165毫米,最小半径为35毫米。我已经确定我的基础[字体大小] [1]应为20.然后我做了一些思考并想出了方程式。

半径=(选择字体大小/ 20)* 130。这只是一个估计,我意识到它可能不对,但我认为它至少可以作为一个模板。

然后我决定创建两个不同的圆,有两个不同的中心点,然后将它们链接在一起以创建形状。我认为INSIDE线必须具有更大的半径和沿X轴进一步的中心点(Y保持不变),因为它可以切入外线。*

*(我知道这不是它在画面上的样子,只是我的思想链,因为它仍然会给出相同的形状)

所以我将第二个中心点定义为(X + 4,Y)。 (再次,只是估计,认为它们相隔多远并不重要。)

然后我决定Radius 2 =(选择字体大小/ 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轴停止,给出半圆形状)。

如果这是有道理的,我试图得到两个圆圈来绘制形状,使得它们具有相同的起点和终点。

如果有人对如何做到这一点有任何建议,那就太好了,因为圆圈没有连接,目前所有我都变得更加“半圆环”了。

因此。有没有人有任何提示/提示/链接,他们可以与我分享如何解决这个问题?

再次感谢,如有任何问题,抱歉,如果您让我知道,我会尽力纠正。

干杯

1 个答案:

答案 0 :(得分:0)

圆形上的点的公式:

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

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

解决y

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

所以现在如果内圈的中心位于@ h/k,则半月将开始@ h并延伸到h - r2

现在你需要解决内圆和外圆的端点公式并绘制它。每x你应该得到4分(解决方程两次,每次有两个解)

我没有实现它,但这将是我的思路......