svn-gvsig-desktop / tags / Root_CqCMSGisPlanet / libraries / libCq CMS for java.old / src / org / cresques / px / dxf / DxfCalXtru.java @ 1933
History | View | Annotate | Download (2.17 KB)
1 |
package org.cresques.px.dxf; |
---|---|
2 |
|
3 |
import java.awt.geom.Point2D; |
4 |
import java.lang.Math; |
5 |
import org.cresques.geo.Point3D; |
6 |
|
7 |
public class DxfCalXtru { |
8 |
public static Point2D CalculateXtru(Point3D coord_in, Point3D xtru) { |
9 |
Point2D coord_out = new Point2D.Double(); |
10 |
|
11 |
double dxt0 = 0D, dyt0 = 0D, dzt0 = 0D; |
12 |
double dvx1, dvx2, dvx3;
|
13 |
double dvy1, dvy2, dvy3;
|
14 |
double dmod, dxt, dyt, dzt;
|
15 |
|
16 |
double aux = 1D/64D; //LWS |
17 |
double aux1 = Math.abs(xtru.getX()); |
18 |
double aux2 = Math.abs(xtru.getY()); |
19 |
|
20 |
dxt0 = coord_in.getX(); |
21 |
dyt0 = coord_in.getY(); |
22 |
dzt0 = coord_in.getZ(); |
23 |
|
24 |
double xtruX, xtruY, xtruZ;
|
25 |
xtruX = xtru.getX(); |
26 |
xtruY = xtru.getY(); |
27 |
xtruZ = xtru.getZ(); |
28 |
|
29 |
if ((aux1 < aux) && (aux2 < aux)) {
|
30 |
dmod = Math.sqrt(xtruZ*xtruZ + xtruX*xtruX);
|
31 |
dvx1 = xtruZ / dmod; |
32 |
dvx2 = 0;
|
33 |
dvx3 = -xtruX / dmod; |
34 |
} else {
|
35 |
dmod = Math.sqrt(xtruY*xtruY + xtruX*xtruX);
|
36 |
dvx1 = -xtruY / dmod; |
37 |
dvx2 = xtruX / dmod; |
38 |
dvx3 = 0;
|
39 |
} |
40 |
|
41 |
dvy1 = xtruY*dvx3 - xtruZ*dvx2; |
42 |
dvy2 = xtruZ*dvx1 - xtruX*dvx3; |
43 |
dvy3 = xtruX*dvx2 - xtruY*dvx1; |
44 |
|
45 |
dmod = Math.sqrt(dvy1*dvy1 + dvy2*dvy2 + dvy3*dvy3);
|
46 |
|
47 |
dvy1 = dvy1 / dmod; |
48 |
dvy2 = dvy2 / dmod; |
49 |
dvy3 = dvy3 / dmod; |
50 |
|
51 |
dxt = dvx1*dxt0 + dvy1*dyt0 + xtruX*dzt0; |
52 |
dyt = dvx2*dxt0 + dvy2*dyt0 + xtruY*dzt0; |
53 |
dzt = dvx3*dxt0 + dvy3*dyt0 + xtruZ*dzt0; |
54 |
|
55 |
coord_out.setLocation(dxt, dyt); |
56 |
//coord_out.z = dzt;
|
57 |
|
58 |
dxt0 = 0;
|
59 |
dyt0 = 0;
|
60 |
dzt0 = 0;
|
61 |
|
62 |
return coord_out;
|
63 |
} |
64 |
|
65 |
public static double cosDeg(double alfa) { |
66 |
final double toRad = Math.PI/(double)180.0; |
67 |
return Math.cos(alfa*toRad); |
68 |
} |
69 |
|
70 |
public static double sinDeg(double alfa) { |
71 |
final double toRad = Math.PI/(double)180.0; |
72 |
return Math.sin(alfa*toRad); |
73 |
} |
74 |
|
75 |
public static void CalculateArc(double[] dat, double r, double angulo) { |
76 |
dat[1] = dat[1] + r * Math.sin(angulo*Math.PI/(double)180.0); |
77 |
dat[0] = dat[0] + r * Math.cos(angulo*Math.PI/(double)180.0); |
78 |
} |
79 |
|
80 |
} |