私はAndroidを学んでいて、今はCanvasクラスを試しています。
既知の円に内接する正三角形(正三角形)を描きたいと思います。
三角測量、ピタゴラス、...に入るよりも簡単な方法があるに違いないと思います。
三角法を実行することは、私が見つけた最も簡単な方法です。以下は、通常の「上向き」の向きで正三角形を描くための関数です。三角形の回転も処理する、より洗練された実装をここに投稿しました。
private void drawCircumscribedTriangle(Canvas canvas, float circleCenterX, float circleCenterY, float radius, Paint paint) {
float xOffsetFromCenter = FloatMath.cos((float)Math.PI/6) * radius;
float yOffsetFromCenter = FloatMath.sin((float)Math.PI/6) * radius;
canvas.drawLine(circleCenterX, circleCenterY - radius, circleCenterX + xOffsetFromCenter, circleCenterY + yOffsetFromCenter, paint);
canvas.drawLine(circleCenterX + xOffsetFromCenter, circleCenterY + yOffsetFromCenter, circleCenterX - xOffsetFromCenter, circleCenterY + yOffsetFromCenter, paint);
canvas.drawLine(circleCenterX - xOffsetFromCenter, circleCenterY + yOffsetFromCenter, circleCenterX, circleCenterY - radius, paint);
}
Acjのおかげで、私はそれを手に入れました、しかし、私がそれを埋めたかったので、それは私が望んでいたものではありませんでした(私がそれを指定しなかったのでそれは私のせいです)。
とにかく、私はAcjのコードを自分のニーズに適合させました、そしてここにそれがあります:
private void drawCircumscribedTriangle(Canvas canvas, float circleCenterX, float circleCenterY, float radius, Paint paint) {
float xOffsetFromCenter = FloatMath.cos((float)Math.PI/6) * radius;
float yOffsetFromCenter = FloatMath.sin((float)Math.PI/6) * radius;
Path path = new Path();
path.setFillType(Path.FillType.EVEN_ODD);
path.moveTo(circleCenterX, circleCenterY - radius);
path.lineTo(circleCenterX + xOffsetFromCenter, circleCenterY + yOffsetFromCenter);
path.lineTo(circleCenterX - xOffsetFromCenter, circleCenterY + yOffsetFromCenter);
path.lineTo(circleCenterX, circleCenterY - radius);
path.lineTo(circleCenterX, circleCenterY - radius);
canvas.drawPath(path, paint);
}
もう一度、すべてのメリットはAcjにあります
API 23以降廃止されたようFloatMath.cos(float)
に、トリッキーな正三角形の質問に対するこの回答には、次のコード行を更新する必要があります。
float xOffsetFromCenter = ((float)Math.PI/6) * radius;
float yOffsetFromCenter = ((float)Math.PI/6) * radius;