簡體   English   中英

點在一個圓上,有限制。 如何在沒有角度但半徑和中心點的情況下進行計算?

[英]Points on a circle, with limits. How To calculate without angle, but radius and centre point?

這很難解釋,因此我會盡力而為,如果有任何遺漏的地方,對不起,請告訴我,我將予以糾正。

我的問題是,我受命繪制這種形狀,

新月
(來源: studentsdictionary.com

這是使用C ++編寫代碼來計算此形狀上的點來完成的。

重要細節。

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

輸出-形狀上的坐標列表。

一旦掌握了所有要點,總體目標就是將其放入Excel中的圖形中,並希望以用戶輸入的大小為我繪制圖形!

我知道最大半徑為165mm,最小為35mm。 我決定將我的基本字體大小設置為20。然后我做了一些思考,得出了等式。

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

然后,我決定應該創建兩個具有兩個不同中心點的不同圓,然后將它們鏈接在一起以創建形狀。 我認為INSIDE線必須具有更大的半徑和沿X軸更遠的中心點(Y保持不變),這樣才可以切入外線。

因此,我將第二個中心點定義為(X + 4,Y)。 (再次,只是估計,認為它們之間的距離並不重要)。

然后我決定半徑2 =(選擇的字體大小/ 20)* 165(最大半徑)

因此,我有2個Radii和兩個中心點。

現在計算圓上的積分,我真的很掙扎。 我決定最好的方法是創建一個增量(這是模板)

for(int i=0; i<=n; i++) //where 'n' is users chosen number of points
{ 
  //Equation for X point
  //Equation for Y Point
  cout<<"("<<X<<","<<Y<<")"<<endl;
}

現在,對於我的一生,我無法找出方程式來計算積分。 我發現了涉及角度的方程,但是由於我沒有方程,所以我很努力。

從本質上講,我一直在嘗試計算點“ P”,除了一直繞圓。 圓點
(來源: tutorvista.com

我在想的另一點可能是一個問題,就是對計算出的值施加限制以僅顯示形狀上的值。 除了使外線成為完整的半圓之外,不確定是否要選擇其他極限,所以我有最大半徑嗎?

所以。 任何人都沒有任何提示/技巧/鏈接,可以與我分享如何正確進行操作?

再次感謝您,如果有任何問題,對不起,如果您讓我知道,我們將盡力糾正。

干杯

更新;

R1 = (Font/20)*130;
R2 = (Font/20)*165;

for(X1=0; X1<=n; X1++)
{
    Y1 = ((2*Y)+(pow(((4*((pow((X1-X), 2)))+(pow(R1, 2)))), 0.5)))/2;
    Y2 = ((2*Y)-(pow(((4*((pow((X1-X), 2)))+(pow(R1, 2)))), 0.5)))/2;
    cout<<"("<<X1<<","<<Y1<<")";
    cout<<"("<<X1<<","<<Y2<<")";
}

意見?

圓的方程是

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

只需一點代數,您就可以在從hh+r的范圍內以適當的delta遞增迭代x ,並計算y的兩個對應值。 這將畫出一個完整的圓圈。

下一步是找到兩個圓的交點的x坐標(假設月亮形狀由兩個適當的圓定義)。 同樣,一些代數和鉛筆和紙將有所幫助。

更多細節:

要在不使用極坐標和觸發的情況下繪制圓,可以執行以下操作:

for x in h-r to h+r increment by delta
    calculate both y coordinates

要計算y坐標,您需要求解y的圓方程。 最簡單的方法是將其轉換為形式為A*y^2+B*y+C=0的二次方程,然后使用二次方程:

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

所以我們有

A = 1
B = -2*k
C = k^2 + (x - h)^2  - r^2

現在將它們插入二次方程式,並為for循環中的每個x值導出兩個y值。 (很可能,您將需要在一個或多個單獨的函數中進行計算。)

如您所見,這非常混亂。 使用三角函數和角度進行此操作會更清潔。

更多想法:

即使問題中描述的用戶輸入中沒有角度,也沒有內在的原因為什么您不能在計算過程中使用它們(除非您有特殊要求,否則請說,因為您的老師告訴您不要這樣做)。 話雖如此,使用極坐標使此操作變得更加容易。 對於完整的圈子,您可以執行以下操作:

for theta = 0 to 2*PI increment by delta
    x = r * cos(theta)
    y = r * sin(theta)

要繪制圓弧而不是完整的圓,您只需在for循環中更改theta的限制。 例如,圓的左半部分從PI/2變為3*PI/2

根據Code-Guru對問題的評論,內圈看起來比外圈更像一個半圈。 使用Code-Guru答案中的方程式計算內圓的點。 然后,看看這個問題 ,在給定距離(可以任意設置)和相交點(因為是半圓)的情況下,如何計算與圓相交的圓的半徑。 由此,您可以繪制任意給定距離的外圓弧,而要做的就是改變距離,直到生成滿意的形狀。

這個問題可以幫助您應用Code-Guru方程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM