Revision 45242 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/Arc2D.java
Arc2D.java | ||
---|---|---|
69 | 69 |
*/ |
70 | 70 |
public void setPoints(Point center, double radius, double startAngle, double angleExt) { |
71 | 71 |
|
72 |
double diameter = radius*2; |
|
73 |
double x; |
|
74 |
double y; |
|
75 |
double start; |
|
76 |
double extent; |
|
77 |
double angleOffset; |
|
78 |
final double pi2 = Math.PI*2; |
|
79 |
|
|
80 |
angleOffset = 0; |
|
81 |
if( angleExt<0 ) { |
|
82 |
angleOffset = pi2 + angleExt; |
|
83 |
angleExt = Math.abs(angleExt); |
|
84 |
} |
|
85 |
x = center.getX() - radius; |
|
86 |
y = center.getY() - radius; |
|
87 |
|
|
88 |
if( angleExt > 0 && (angleExt % pi2) == 0 ) { |
|
89 |
start = 0; |
|
90 |
extent = 360; |
|
91 |
} else { |
|
92 |
angleExt = angleExt % pi2; //Asumimos que aqui angleExt es siempre positivo |
|
93 |
startAngle = Math.abs(startAngle) % pi2; |
|
94 |
start = Math.toDegrees( pi2 - startAngle + angleOffset) ; |
|
95 |
extent = - Math.toDegrees(pi2 - angleExt); |
|
96 |
} |
|
97 |
|
|
98 |
|
|
99 |
double angleStart = Math.toRadians(-start); |
|
100 |
double initX = x + (Math.cos(angleStart) * 0.5 + 0.5) * diameter; |
|
101 |
double initY = y + (Math.sin(angleStart) * 0.5 + 0.5) * diameter; |
|
102 |
init = new Point2D(initX, initY); |
|
103 |
|
|
104 |
double angleEnd = Math.toRadians(-start - extent); |
|
105 |
double endX = x + (Math.cos(angleEnd) * 0.5 + 0.5) * diameter; |
|
106 |
double endY = y + (Math.sin(angleEnd) * 0.5 + 0.5) * diameter; |
|
107 |
end = new Point2D(endX, endY); |
|
108 |
|
|
109 |
double angleMiddle = Math.toRadians(-start - extent)/2; |
|
110 |
double middleX = x + (Math.cos(angleMiddle) * 0.5 + 0.5) * diameter; |
|
111 |
double middleY = y + (Math.sin(angleMiddle) * 0.5 + 0.5) * diameter; |
|
112 |
middle = new Point2D(middleX, middleY); |
|
72 |
init = new Point2D( |
|
73 |
center.getX()+radius*Math.cos(startAngle), |
|
74 |
center.getY()+radius*Math.sin(startAngle) |
|
75 |
); |
|
76 |
|
|
77 |
double midAngle = startAngle+angleExt/2; |
|
78 |
middle = new Point2D( |
|
79 |
center.getX()+radius*Math.cos(midAngle), |
|
80 |
center.getY()+radius*Math.sin(midAngle) |
|
81 |
); |
|
82 |
|
|
83 |
end = new Point2D( |
|
84 |
center.getX()+radius*Math.cos(startAngle+angleExt), |
|
85 |
center.getY()+radius*Math.sin(startAngle+angleExt) |
|
86 |
); |
|
87 |
|
|
88 |
|
|
113 | 89 |
} |
114 | 90 |
|
115 | 91 |
/* (non-Javadoc) |
Also available in: Unified diff