, , .
- 0 deg β (-1,0)
- 45 β (-1/sqrt (2), (1/sqrt (2))
- 90 β (0,1)
- 135 deg β (1/sqrt (2), (1/sqrt (2))
- 180 β (1,0)
,
point = center + (unit vector * distance from center)
, andrew.
private static final float RADIUS = 400.0f;
private static final float MARK_LENGTH = 30.0f;
private static final UnitVector[] UNIT_VECTORS = new UnitVector[] {
new UnitVector(-1,0),
new UnitVector((float) (-1/Math.sqrt(2)), (float) (1/Math.sqrt(2))),
new UnitVector(0, 1),
new UnitVector((float) (1/Math.sqrt(2)), (float) (1/Math.sqrt(2))),
new UnitVector(1, 0),
new UnitVector((float) (1/Math.sqrt(2)), (float) (-1/Math.sqrt(2))),
new UnitVector(0, -1),
new UnitVector((float) (-1/Math.sqrt(2)), (float) (-1/Math.sqrt(2))),
};
static class UnitVector {
final float x;
final float y;
UnitVector(final float x, final float y) {
this.x = x;
this.y = y;
}
}
public void drawMarks(final Canvas canvas) {
for (final UnitVector unitVector : UNIT_VECTORS) {
this.drawMarkWithVector(unitVector, canvas);
}
}
private void drawMarkWithVector(final UnitVector unitVector, final Canvas canvas) {
final float centerPointX = this.getWidth() / 2;
final float centerPointY = this.getHeight() / 2;
final float startX = centerPointX + (unitVector.x * RADIUS);
final float startY = centerPointY + (unitVector.y * RADIUS);
final float endX = centerPointX + (unitVector.x * (RADIUS + MARK_LENGTH));
final float endY = centerPointY + (unitVector.y * (RADIUS + MARK_LENGTH));
canvas.drawLine(startX, startY, endX, endY, this.paint);
}
