我想弄清楚如何能夠計算出圓上的座標。爲了簡單,我製作了一些圖像。如何計算具有一定角度的圓上的位置?
這就是開始用我的信息。現在我需要計算新的座標,例如圓圈向右轉90度。就像下一張圖片:
我需要計算新的紅點的座標。 (我也需要不同程度的如20度)。
要做到這一點我的計劃是要做到以下幾點:
- 計算兩點之間的距離
- 計算北(上)和指定點
- 計算新的程度具有度數的位置(從後退開始)+需要旋轉的度數(在圖像中90度)。
我的第一個步驟是:
distance = Math.sqrt((point1.x-point2.x)*(point1.x-point2.x) + (point1.y-point2.y)*(point1.y-point2.y))
來計算新的度的部分是:
double theta = Math.atan2(targetPt.y - centerPt.y, targetPt.x - centerPt.x);
theta += Math.PI/2.0;
而最後一部分來計算新的位置將是:
double x = mMiddleView.getX() + distance * Math.cos(Math.toRadians(theta));
double y = mMiddleView.getY() + distance * Math.sin(Math.toRadians(theta));
但是,當我做這些計算與例如0度,它仍然會返回比原始座標更多的值。
任何幫助,將不勝感激!
爲菲利普Jahoda編輯:
我的價值觀是:
distance +- 70, currentDegree = 0.
PointF point = new PointF((float)mMiddleView.getX(), (float)mMiddleView.getY());
PointF point2 = getPosition(point, (float) distance, currentDegree);
和我的結果是:
center: PointF(490.0, 728.0) radius: 78.0 angle: 0.0
new point: PointF(568.0, 728.0)
正如你所看到的,度數爲0,因此該點不應該轉向。它應該保持490,728的座標,但不保留這些座標。
爲什麼你不能在整個時間以極座標工作?僅適用於展示階段轉換爲笛卡爾。 – Bathsheba 2014-09-19 08:48:57
否則,此鏈接可能會對您有所幫助:http://en.wikipedia.org/wiki/Rotation_matrix – Bathsheba 2014-09-19 08:51:27
您正在使用'x'和'y'。請注意,'x'在向右增加,而'y'在向下增加,因此您的'targetPt.y - centerPt.y'部分應該是相反的 – Eypros 2014-09-19 08:59:51