2013-03-20 72 views
4

我們使用C++進行編碼,有半個圓圈,從某個點開始(例如(0,-310)),並在某個點上完成(0,310)。我們有半徑,我們有方程X^2 + Y^2 = r^2。現在我們試圖計算這個圓圈的一些線條(比如10+)。查找圓上的點

因此,我們試圖創建一個增量,它將計算這些點之間的Y/X值,使用上面顯示的公式確保計算的所有點位於圓的線上。

一旦我們有了這些點,我們試圖將它們放入幾個複雜的方程中來計算繪製這個形狀的機器人手臂的角度。這並不是優先事項,但我認爲我應該在這個問題中包含我們的總體目標。

如何創建一個增量來計算我們兩個起點之間的半圓線上的所有座標?
然後將這些值代入上面代碼中的公式中,以計算機器人手臂的角度。尋找一種方法來做到這一點,而不是單獨計算每個點,即創建一個可以一次完成的增量。

This是我們正在瞄準的一種,以粗體計算點。可以使用該公式來確定

+2

你需要什麼幫助,分辨率? – 2013-03-20 14:13:25

+2

使用極座標可能會更好 - 例如http://janjorissen.be/drawing-a-perfect-circle-with-the-curveto-function/(我知道它是Flash,而不是C++,但你可以看到這個想法) – 2013-03-20 14:13:47

+1

我看不出這個問題有什麼用C++做? – 2013-03-20 14:24:21

回答

3

點是否需要均勻分佈?如果沒有,那麼你可以只使用直接公式:

// assume half-circle centered at (0,0) and radius=310 
double r = 310.0; 
int n = 10; 
for(int i=0; i<n; i++) 
{ 
    double x = i*r/n; 
    double y = sqrt(r*r - x*x); 
    // both (x,y) and (x,-y) are points on the half-circle 
} 

一旦這樣的工作,你也可以用x值的分佈玩到接近甚至繞了一圈間距。

如果你的圈子沒有居中在(0,0)那麼只是用實際中心偏移計算的(x,y)

+0

多數民衆贊成在輝煌的感謝,會給它一個去。乾杯! – 2013-03-20 15:23:55

+0

好的,我試過了。當X值改變時,Y值始終停留在310處。有什麼方法可以改變它嗎? – 2013-03-20 15:33:36

+0

@RoryDuncan - 隨着x越接近r,x * x越接近r * r,所以sqrt(r * r - x * x)變得更接近零,它不可能保持在310.必須是編碼錯誤。 – Eric 2013-03-20 16:03:40

3

圓的點:

x = radius * cos(angle) 
y = radius * sin(angle) 

你將不得不確定片,部分或要繪製的圓的弧,並確定起始角度和終止角度。

否則,在SO和web上搜索「arc drawing algorithm C++」。
X = X0 + cos(西塔)* R
Y = Y0 +仙(西塔)* R

+0

有許多方法可以給皮膚上皮,**使用OP提供的配方包含**。我既不會使用那個公式,也不會使用您提供的那個。無論如何,措辭「使用公式......」表明你認爲這是「做到這一點」的方式,但事實並非如此,有很多方法,而你選擇的方法恰恰是效率最低的他們所有人中。 – 2013-03-20 14:21:14

+1

爲了不暗示這是**最有效的方法。通過搜索網絡上的弧線繪圖算法可以找到更高效的算法。 – 2013-03-20 14:25:44

+0

謝謝,請關注一下給他們一個去。 :) – 2013-03-20 14:46:25

0

你可以通過改變你的公式是西塔(角度),這樣的做在你的情況下(X0,Y0)=(0,0),r = 310和Theta範圍在-180-180之間(如果你的cos和sin爲度)或者-Phi-Phi(如果cos和sin in半徑)。

現在,如果你想要10分,你需要把你的Theta範圍,並將其分成10和Cal X,Y爲每個這些值。

+0

謝謝,將調查它:) – 2013-03-20 15:24:39