1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 package net.sourceforge.kamiwaai.geometricalgebra;
40 import java.awt.BasicStroke;
41 import java.awt.Color;
42 import java.awt.Graphics;
43 import java.awt.Graphics2D;
44 import java.awt.geom.GeneralPath;
45 public class Line extends GeometricObject {
46
47
48 private Color color = Color.cyan;
49 public Line(MultiVector L2) {
50 L = L2;
51 }
52 public Line(PointC point1, PointC point2) {
53 MultiVector point1MV = point1.getMultiVector();
54 MultiVector point2MV = point2.getMultiVector();
55 L = point1MV.OutProd(point2MV).OutProd(MultiVectors.n());
56 }
57 public void setColor(Color c) {
58 color = c;
59 }
60 public MultiVector getMoment() {
61 MultiVector m = L.OutProd(nbar).mult(N);
62 return m;
63 }
64 public MultiVector getLineVector() {
65 MultiVector lv = L.Rcontract(N);
66 return lv;
67 }
68 public MultiVector LinePoint(double alpha) {
69
70
71
72 MultiVector u = getLineVector();
73 MultiVector uinv = u.multSc(1.0 / (u.magnitude() * u.magnitude()));
74 MultiVector X = getMoment().mult(uinv).add(u.multSc(alpha));
75 return X;
76 }
77 public double[] linepoint3D(double alpha) {
78 double[] lps = new double[3];
79 lps[0] = LinePoint(alpha).get3DEuclidianPoint()[0];
80 lps[1] = LinePoint(alpha).get3DEuclidianPoint()[1];
81 lps[2] = LinePoint(alpha).get3DEuclidianPoint()[2];
82 return lps;
83 }
84 public void draw(Graphics g) {
85
86 double par = 5000.0 / getLineVector().magnitude();
87 Graphics2D g2 = (Graphics2D) g;
88 g2.setColor(color);
89 g2.setStroke(new BasicStroke(1.0f));
90
91 GeneralPath p = new GeneralPath();
92 p.moveTo((float) linepoint3D(-par)[0], (float) linepoint3D(-par)[1]);
93 p.lineTo((float) linepoint3D(par)[0], (float) linepoint3D(par)[1]);
94
95 g2.draw(p);
96 }
97 public void drawZ(Graphics g) {
98
99 double par = 5000.0 / getLineVector().magnitude();
100 Graphics2D g2 = (Graphics2D) g;
101 g2.setColor(color);
102 g2.setStroke(new BasicStroke(1.0f));
103
104 GeneralPath p = new GeneralPath();
105 p.moveTo((float) linepoint3D(-par)[2], (float) linepoint3D(-par)[1]);
106 p.lineTo((float) linepoint3D(par)[2], (float) linepoint3D(par)[1]);
107
108 g2.draw(p);
109 }
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136 public MultiVector PDistance2D(double[] point, MultiVector plane) {
137
138
139
140 MultiVector Lp, Pp, x, Tx, Txr, XPp, xpp, up, upinv, dp;
141 Lp = L.Lcontract(plane).mult(plane.multSc(-1.0));
142 Line linep = new Line(Lp);
143 PointC Pc = new PointC();
144 Pc.sete1(point[0]);
145 Pc.sete2(point[1]);
146 Pc.sete3(point[2]);
147 Pp = Pc.getMultiVector().Lcontract(plane).mult(plane.multSc(-1.0));
148 x = linep.LinePoint(0.0);
149 Tx = One.add(n.mult(x).multSc(0.5));
150 Txr = Tx.reverse();
151 XPp = Txr.mult(Pp).mult(Tx);
152 xpp = XPp.OutProd(N).mult(N);
153 up = linep.getLineVector();
154
155 upinv = up.multSc(1.0 / (up.magnitude() * up.magnitude()));
156 dp = (xpp.OutProd(up)).mult(upinv);
157 return dp;
158 }
159 public double distanceXY(double[] point) {
160 MultiVector xyplane, dxy;
161 xyplane = e1.OutProd(e2).mult(N);
162 dxy = PDistance2D(point, xyplane);
163 return dxy.magnitude();
164 }
165 public double distanceYZ(double[] point) {
166 MultiVector yzplane, dyz;
167 yzplane = e2.OutProd(e3).mult(N);
168 dyz = PDistance2D(point, yzplane);
169 return dyz.magnitude();
170 }
171
172 }