2013-03-28 75 views
0

這個解釋很複雜,所以我會盡我所能,抱歉如果有什麼我錯過了,讓我知道,我會糾正它。用C++/Excel連接圓圈

我的問題是,我一直負責繪製這種形狀,

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

這是用C++編寫的代碼,將計算在該形狀的點來完成。

重要細節。

用戶輸入 - 中心點(X,Y),要顯示的點數,字體大小(影響半徑)

輸出 - 的形狀座標列表。

一旦我有了要點,總體目標就是將它們放入Excel中的圖表上,並希望以用戶輸入的大小爲我繪製它!

我知道最大半徑是165mm,最小值是35mm。我決定我的基礎[字體大小] [1]應爲20.然後我做了一些思考並提出了方程式。

半徑=(選擇的字體大小/ 20)* 130。這只是一個估計,我意識到它可能不對,但我認爲它至少可以作爲一個模板。

然後我決定創建兩個不同的圓,有兩個不同的中心點,然後將它們連接在一起創建形狀。我認爲INSIDE線必須具有更大的半徑和沿着X軸(Y保持不變)的更遠的中心點,因爲那樣它可以切入外線。*

*(我知道這是不是它在圖片上看起來像什麼,只是我的思路,因爲它仍然會給出相同的形狀)所以我將第二中心點定義爲(X + 4,Y)。 (再次,只是估計,認爲它們之間的距離並不重要)。

我再決定半徑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

表現公式爲圓上的點:

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

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

所以,現在如果內圓的中心@h/k,半月形就會解決y的

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

開始@ h並將延伸至h - r2

現在你需要解出內圓和外圓的終點公式並繪製它。每x你應該得到4點(解決方程兩次,每個有兩個解決方案)

我沒有實現它,但這將是我的思路......