2014-10-16 121 views
1

我有一個UIView與界限(w,h),我試圖計算角度和點在一個橢圓形是在視圖的中點,即中心是(w * 0.5,h * 0.5)。我不斷地改變視圖和橢圓的大小,所以下面的值是來自控制檯的值的一個實例。問題與橢圓角度計算和點計算

對於這種情況下,(W,H)=(150.000000,300.799988)和半徑(RX,RY)=(52.500000,105.279999)

現在,我試圖找到30.784275點P1(x,y)的角度(,在此使用橢圓以下代碼93.637390):

CGFloat angle = atan2((y - (h * 0.5)), (x - (w * 0.5))); 
if (angle < 0) 
{ 
    angle += 2 * M_PI; 
} 

角度值I得到的是4.050611

因爲我沒有得到我想要的輸出我只是試圖找到從上述角度使用下面的代碼在橢圓點:

framePoint.x = (w * 0.5) + (rx * cosf(angle)); 
framePoint.y = (h * 0.5) + (ry * sinf(angle)); 

令人奇怪的是我得到了點作爲(42.737656,67.344543)。

我只是繼續前進,並做了一個相同的過程迭代。我從上面的角度計算角度,得到角度爲4.341885,從這個最新角度得到新的點(55.990501,52.263786)。

我知道我的計算公式有些問題,但我無法指出它。

此外,如果上面的橢圓是一個圓,即當rx = ry時,所有的點和角都相等。所以它適用於圓而不適用於橢圓。

所以,我想知道我錯在哪裏。

+0

1.檢查ATAN2使用(我用我的atanxy,而不是在這裏:http://stackoverflow.com/a/21697187/2521214)如果操作數是dx,dy或dy,dx 2.你也可以使用我的atanxy並比較結果3.檢查你的cos,sin atan2是否使用相同的單位(rad,deg)3.嘗試添加括號(',') '協調計算以排除錯誤的操作數優先級編譯器錯誤(它發生在我過去幾次以來,因爲我包圍了我能確定的東西) – Spektre 2014-10-17 07:05:27

+0

@Spektre:我加倍檢查了一切。也嘗試與你的atanxy。 atanxy表現不同,但仍然給出錯誤的價值。我想知道我發佈的代碼的問題,因爲我的數學在某個地方顯然是錯誤的。 – blancos 2014-10-17 08:23:32

+0

有一段時間得到你的問題是...添加答案。基本的東西是最糟糕的錯誤:)你可以永遠登上他們......新鮮的眼睛通常有幫助 – Spektre 2014-10-17 10:02:10

回答

1

是現在我看到你的意思

  • 您通過E=atan2(...)
  • 獲得由橢圓E角度和公式,你需要M角度x=x0+rx*cos(M), y=...
  • 中號使用它是平均圓形角
  • 和E是橢圓角
  • enter image description here
  • 這與開普勒方程類比。
  • 幸運的是,你不需要匹配周圍的主要聚焦點這樣的速度:

爲了獲得M角度

  • 你要擴展一個軸轉換橢圓圈
  • 並計算有
  • 因此,如果您軸神韻:橢圓是(x0,y0,rx,ry)
  • 和輸入點上的角橢圓是(x1,y1)
  • 那麼,如果我沒有記錯的話應該是這樣的:
  • M=atan2((y1-y0)*rx/ry,x1-x0)M=atan2(y1-y0,(x1-x0)*ry/rx)
  • x=x0+rx*cos(M)
  • y=y0+ry*sin(M)

[注意事項]

  • X座標這兩點應該是相同的(圖像是手繪在油漆)
  • 不要緊哪個軸您縮放和不
+0

謝謝。有效!!在這一天掙扎了整整一天。 – blancos 2014-10-17 10:44:47