5

キャンバス

この答えの最も簡単な説明は、白い点の座標を見つけようとしているということです。濃い赤は、描かれた円 (濃い青) の上に描かれた円弧です。

より長い説明: 私は拡張Viewし、キャンバス上に円を描いているクラスを持っています (キャンバスの幅と高さは同じです):

canvas.drawArc(rectF, 0, 360, true, paint); // mOvals is a RectF object with 4 coordinates

次に、幅 N パーセント (この場合は 225 としましょう) の弧を描きます。円弧は -90 度 (キャンバスの 0 度は 3 時を意味するため) から始まり、N 度 (この例では 225) に「迷走」します。

X/Y 座標または残りの円弧 (赤い円弧で覆われていない領域、つまり N ~ 360 の間) の中心を計算しようとしています。

円の半径は canvasWidth/2 です。

赤い弧を描く方法は次のとおりです。

long arcEnd = (360 * fractionNumber) / totalNumber;
canvas.drawArc(rectF, -90, arcEnd, true, paint);
4

1 に答える 1

7

(元の答えが更新されました。今は少し冗長すぎるかもしれませんが、私はそれが役立つことを願っています。)

XY 座標 (デカルト座標と呼ばれます) を探していますが、これらを直接計算することは困難です。秘訣は、最初に極座標を調べることです。極座標とデカルト座標は、同じもの、つまりグリッド内の点を表現する 2 つの方法であり、相互に変換できます。

極座標は、中心点からの角度と距離で構成されます。カバーする必要がある円のパーセンテージがわかっているため、目的の角度を計算できます。また、円の半径がわかっているため、中心からの距離を計算できます。

あなたのカバー アークは 225 度なので、残りは 135 で、その半分の 67.5 度です。したがって、探しているポイントの角度は 225+67.5 = 292.5 度です。その点の半径は円の半径の半分なので、canvasWidth/4です。

極座標 を決定したら、変換関数(292.5, canvasWidth/4)を使用してこれを XY 座標に変換します。少しトリッキーなことが 1 つあります。引数が度ではなくラジアンであると想定します。変換を行う前に、292.5/360 を x/2π として表現します。変換を行うには、値に π/180 を掛けて、この場合は 5.1051 を求めます。Math.cos(double)Math.sin(double)

canvasWidthそれが 400であると仮定すると、次のようになります。

double tdeg 292.5d; // Calculated from arc percentage 
int r =  100;      // Calculated from canvas width

double trad = tdeg * (Math.PI/180d); // = 5.1051

int x = (int) r * Math.cos(trad);
int y = (int) r * Math.sin(trad);
于 2012-10-14T14:38:54.687 に答える