package com.opendoorlogistics.codefromweb.shapes;
/**
* This code is from http://java-sl.com/shapes.html
*/
import java.awt.*;
public class StarPolygon extends Polygon {
public StarPolygon(int x, int y, int r, int innerR, int vertexCount) {
this(x, y, r, innerR, vertexCount, 0);
}
public StarPolygon(int x, int y, int r, int innerR, int vertexCount, double startAngle) {
super(getXCoordinates(x, y, r, innerR, vertexCount, startAngle)
,getYCoordinates(x, y, r, innerR, vertexCount, startAngle)
,vertexCount*2);
}
protected static int[] getXCoordinates(int x, int y, int r, int innerR, int vertexCount, double startAngle) {
int res[]=new int[vertexCount*2];
double addAngle=2*Math.PI/vertexCount;
double angle=startAngle;
double innerAngle=startAngle+Math.PI/vertexCount;
for (int i=0; i<vertexCount; i++) {
res[i*2]=(int)Math.round(r*Math.cos(angle))+x;
angle+=addAngle;
res[i*2+1]=(int)Math.round(innerR*Math.cos(innerAngle))+x;
innerAngle+=addAngle;
}
return res;
}
protected static int[] getYCoordinates(int x, int y, int r, int innerR, int vertexCount, double startAngle) {
int res[]=new int[vertexCount*2];
double addAngle=2*Math.PI/vertexCount;
double angle=startAngle;
double innerAngle=startAngle+Math.PI/vertexCount;
for (int i=0; i<vertexCount; i++) {
res[i*2]=(int)Math.round(r*Math.sin(angle))+y;
angle+=addAngle;
res[i*2+1]=(int)Math.round(innerR*Math.sin(innerAngle))+y;
innerAngle+=addAngle;
}
return res;
}
}