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/Arc2DZ.java | ||
---|---|---|
35 | 35 |
import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3D; |
36 | 36 |
import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3D; |
37 | 37 |
import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D; |
38 |
import org.gvsig.fmap.geom.jts.primitive.point.Point2D; |
|
38 | 39 |
import org.gvsig.fmap.geom.jts.primitive.point.Point3D; |
39 | 40 |
import org.gvsig.fmap.geom.jts.primitive.point.PointJTS; |
40 | 41 |
import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D; |
... | ... | |
73 | 74 |
public void setPoints(Point center, double radius, double startAngle, double angleExt) { |
74 | 75 |
center = fixPoint(center); |
75 | 76 |
|
76 |
double diameter = radius * 2; |
|
77 |
double x; |
|
78 |
double y; |
|
79 |
double start; |
|
80 |
double extent; |
|
81 |
double angleOffset; |
|
82 |
final double pi2 = Math.PI * 2; |
|
77 |
init = new Point3D( |
|
78 |
center.getX()+radius*Math.cos(startAngle), |
|
79 |
center.getY()+radius*Math.sin(startAngle), |
|
80 |
((Point3D) center).getZ() |
|
81 |
); |
|
82 |
|
|
83 |
double midAngle = startAngle+angleExt/2; |
|
84 |
middle = new Point3D( |
|
85 |
center.getX()+radius*Math.cos(midAngle), |
|
86 |
center.getY()+radius*Math.sin(midAngle), |
|
87 |
((Point3D) center).getZ() |
|
88 |
); |
|
89 |
|
|
90 |
end = new Point3D( |
|
91 |
center.getX()+radius*Math.cos(startAngle+angleExt), |
|
92 |
center.getY()+radius*Math.sin(startAngle+angleExt), |
|
93 |
((Point3D) center).getZ() |
|
94 |
); |
|
83 | 95 |
|
84 |
angleOffset = 0; |
|
85 |
if (angleExt < 0) { |
|
86 |
angleOffset = pi2 + angleExt; |
|
87 |
angleExt = Math.abs(angleExt); |
|
88 |
} |
|
89 |
x = center.getX() - radius; |
|
90 |
y = center.getY() - radius; |
|
91 |
|
|
92 |
if (angleExt > 0 && (angleExt % pi2) == 0) { |
|
93 |
start = 0; |
|
94 |
extent = 360; |
|
95 |
} else { |
|
96 |
angleExt = angleExt % pi2; // Asumimos que aqui angleExt es siempre |
|
97 |
// positivo |
|
98 |
startAngle = Math.abs(startAngle) % pi2; |
|
99 |
start = Math.toDegrees(pi2 - startAngle + angleOffset); |
|
100 |
extent = -Math.toDegrees(pi2 - angleExt); |
|
101 |
} |
|
102 |
|
|
103 |
double angleStart = Math.toRadians(-start); |
|
104 |
double initX = x + (Math.cos(angleStart) * 0.5 + 0.5) * diameter; |
|
105 |
double initY = y + (Math.sin(angleStart) * 0.5 + 0.5) * diameter; |
|
106 |
init = new Point3D(initX, initY, ((Point3D) center).getZ()); |
|
107 |
|
|
108 |
double angleEnd = Math.toRadians(-start - extent); |
|
109 |
double endX = x + (Math.cos(angleEnd) * 0.5 + 0.5) * diameter; |
|
110 |
double endY = y + (Math.sin(angleEnd) * 0.5 + 0.5) * diameter; |
|
111 |
end = new Point3D(endX, endY, ((Point3D) center).getZ()); |
|
112 |
|
|
113 |
double angleMiddle = Math.toRadians(-start - extent) / 2; |
|
114 |
double middleX = x + (Math.cos(angleMiddle) * 0.5 + 0.5) * diameter; |
|
115 |
double middleY = y + (Math.sin(angleMiddle) * 0.5 + 0.5) * diameter; |
|
116 |
middle = new Point3D(middleX, middleY, ((Point3D) center).getZ()); |
|
117 | 96 |
} |
118 | 97 |
|
119 | 98 |
/* |
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 | ||
---|---|---|
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