繁体   English   中英

在C ++ / Excel中连接圆

[英]Connecting Circles in C++/Excel

这很难解释,因此我会尽力而为,如果有任何遗漏的地方,对不起,请告诉我,我将予以纠正。

我的问题是,我受命绘制这种形状,

新月
(来源: studentsdictionary.com

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

重要细节。

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

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

一旦掌握了所有要点,总体目标就是将其放入Excel中的图形中,并希望以用户输入的大小为我绘制图形!

我知道最大半径为165mm,最小为35mm。 我决定将[Font Size] [1]设为20。然后我做了一些思考,得出了等式。

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

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

*(我知道这不是图片上的样子,只是我的想法,因为它仍然会呈现相同的形状)

因此,我将第二个中心点定义为(X + 4,Y)。 (再次,只是估计,认为它们之间的距离并不重要)。

然后我决定半径2 =(选择的字体大小/ 20)* 165(最大半径)

因此,我有2个Radii和两个中心点。

到目前为止,这是我的代码(有效,并且上面已经声明/输入了所有内容)

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轴处停止,给出半甜甜圈形状)。

如果这有道理,我尝试使圆的两个部分绘制形状,使它们具有相同的起点和终点。

如果有人对如何操作有任何建议,那就太好了,由于圆形之间没有连接,我目前正变得更加“半甜甜圈”形状。

所以。 任何人都没有任何提示/技巧/链接,可以与我分享如何解决此问题?

再次感谢您,如果有任何问题,对不起,如果您让我知道,我们将尽力纠正。

干杯

圆点公式:

(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分(两次求解方程式,每一次有两个解)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM