解释起来相当复杂,所以我会尽力而为,如果有什么我错过了对不起,请告诉我,我会纠正它。
我的问题是,我的任务是画出这种形状,
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轴停止,给出半圆形状)。
如果这是有道理的,我试图得到两个圆圈来绘制形状,使得它们具有相同的起点和终点。
如果有人对如何做到这一点有任何建议,那就太好了,因为圆圈没有连接,目前所有我都变得更加“半圆环”了。
因此。有没有人有任何提示/提示/链接,他们可以与我分享如何解决这个问题?
再次感谢,如有任何问题,抱歉,如果您让我知道,我会尽力纠正。
干杯
答案 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分(解决方程两次,每次有两个解)
我没有实现它,但这将是我的思路......