我有一個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時,所有的點和角都相等。所以它適用於圓而不適用於橢圓。
所以,我想知道我錯在哪裏。
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
@Spektre:我加倍檢查了一切。也嘗試與你的atanxy。 atanxy表現不同,但仍然給出錯誤的價值。我想知道我發佈的代碼的問題,因爲我的數學在某個地方顯然是錯誤的。 – blancos 2014-10-17 08:23:32
有一段時間得到你的問題是...添加答案。基本的東西是最糟糕的錯誤:)你可以永遠登上他們......新鮮的眼睛通常有幫助 – Spektre 2014-10-17 10:02:10