4

そのため、SDO_GEOMETRY を使用してアークを作成するデータベースからのクエリがあり、それらは (xStart,yStart)、(xCenter,yCenter)、(xEnd,yEnd) の 3 セットのポイントを使用して作成されます。

虹と中心点が一番上にあると想像してみてください (X2、Y2 として表示 円弧の例: )。 Java のグラフィックスで drawArc() を使用できるように、これを変換しようとしています。ただし、drawArc() はパラメーターを受け取り、startArc および arcAngle パラメーターで立ち往生しており、それらを計算する方法がわかりません。

私は周りを見回しましたが、アークの「終了角度」または「中心角度」もありますが、それらが同じものであるかどうかはわかりません.startArcとarcAngleを計算する方法に関する適切な情報源が見つかりません. 誰もこれに精通していますか?共有して感謝します!

4

3 に答える 3

3

これは、パラメーター コードに役立つはずです。変数が int である限り、変数をいつでもプラグインできます。

ここに画像の説明を入力

役立つリンク: http://jdrawing.sourceforge.net/doc/0.2.5/api/org/jdrawing/graphics/DrawArc.html http://www.java-examples.com/draw-arc-applet-window-例

于 2015-05-09T21:28:31.777 に答える
2

使用する代わりに、 QuadCurve2DdrawArcを使用することもできます (ジオメトリに慣れていなくても、ポイントが対称ジオメトリを定義しない場合は、このアプローチが必要になる場合があります)。曲線の制御点を計算する必要があります。これは、ベジエ曲線の式を使用して行うことができます

B(t) = (1-t)^2 * P0 + 2(1-t)tP1 + t^2 P2

ここで、B(t) は直線上の点です。コントロール ポイントの解決:

P1 = (B(t) - (1-t)^2 * P0 - t^2 P2)/2(1-t)t

中心点の場合、t = 0.5:

//example points, assuming center is at 0.5
int[] p1 = {100,50};
int[] center = {200,100};
int[] p3 = {300,50};
double x = (center[0] - Math.pow(0.5, 2) * p1[0] - Math.pow(0.5, 2) * p3[0] ) / (2*(0.5) * 0.5);
double y = (center[1] - Math.pow(0.5, 2) * p1[1] - Math.pow(0.5, 2) * p3[1] ) / (2*(0.5) * 0.5);
QuadCurve2D curve = new QuadCurve2D.Double(p1[0], p1[1], x, y, p3[0], p3[1]);
g.draw(curve);

上記は、デモンストレーションのために明示的に方程式を示していますが、 と の定数を使用して簡略化できMath.powますdenominator

于 2015-05-09T21:28:59.113 に答える
1

startArc と arcAngle のパラメーターで行き詰まっており、それらの計算方法がわかりません。

2 つのアーク パラメータを指定するには、さまざまな方法があります。

1 つの方法は、0 と 180 を使用することです。つまり、終点から開始し、反時計回りに 180 度円弧を描き、始点に戻ります。(つまり、API ドキュメントから:角度は、0 度が 3 時の位置になるように解釈されます。正の値は反時計回りの回転を示し、負の値は時計回りの回転を示します)

したがって、一般的なコードは次のようになると思います。

g.drawArc (x1, y2, x3 - x1, (y2- y1) * 2, 0, 180);
于 2015-05-09T21:17:05.693 に答える