0

这解释起来很复杂,所以我会尽力而为,如果有什么遗漏的地方,请告诉我,我会改正的。

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

新月
(来源:learnersdictionary.com

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

重要细节。

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

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

一旦我有了这些点,总体目标就是将它们放入 Excel 上的图表中,并希望它会以用户输入的大小为我绘制它!

我知道最大半径为 165 毫米,最小为 35 毫米。我已经决定我的基础 [Font Size][1] 应该是 20。然后我做了一些思考并想出了这个等式。

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

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

*(我知道这不是图片上的样子,只是我的思路,因为它仍然会给出相同的形状)

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

然后我决定 Radius 2 = (Chosen Font Size/20)*165 (max radius)

所以,我有我的 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 轴上,形成半个甜甜圈形状)。

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

如果有人对如何做到这一点有任何建议,那就太好了,由于圆圈没有连接,目前我正在获得更多的“半甜甜圈”形状。

所以。有没有人可以与我分享有关如何准确解决此问题的任何提示/提示/链接?

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

干杯

4

1 回答 1

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

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

于 2013-03-28T12:23:01.467 回答