EOS 2  1.1.0
Einfache Objektbasierte Sprache
Transform.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.base.layout;
2 
3 import de.lathanda.eos.base.math.Point;
4 import de.lathanda.eos.base.math.Vector;
5 
13 public class Transform {
14  private final Vector v;
15  private final double angle;
16  private final boolean mirrorx;
17  private final double scale;
18  public static final Transform ID = new Transform();
19 
20  private Transform() {
21  v = Vector.ZERO;
22  angle = 0;
23  mirrorx = false;
24  scale = 1d;
25  }
26 
27  private Transform(Vector v, double angle, boolean mirrorx, double scale) {
28  this.v = v;
29  this.angle = angle;
30  this.mirrorx = mirrorx;
31  this.scale = scale;
32  }
33 
34  public Transform rotate(double angle) {
35  if (mirrorx) {
36  return new Transform(v, this.angle - angle, true, scale);
37  } else {
38  return new Transform(v, this.angle + angle, false, scale);
39  }
40 
41  }
42 
43  public Transform rotate(double x, double y, double angle) {
44  if (mirrorx) {
45  return new Transform(v.substract(-x, y).rotate(-angle).add(-x, y), this.angle - angle, true, scale);
46  } else {
47  return new Transform(v.substract(x, y).rotate(angle).add(x, y), this.angle + angle, false, scale);
48  }
49  }
50 
51  public Transform mirrorX() {
52  return new Transform(v.invertX(), -angle, !mirrorx, scale);
53  }
54 
55  public Transform mirrorY() {
56  return new Transform(v.invertX(), Math.PI-angle, !mirrorx, scale);
57  }
58 
59  public Transform scale(double factor) {
60  return new Transform(v, angle, mirrorx, scale * factor);
61  }
62 
63  public Transform scalePositionAt(double x, double y, double factor) {
64  return new Transform(v.substract(x, y).multiply(factor).add(x, y), angle, mirrorx, scale);
65  }
66 
67  public Transform translate(double dx, double dy) {
68  if (mirrorx) {
69  return new Transform(v.add(-dx, dy), angle, mirrorx, scale);
70  } else {
71  return new Transform(v.add(dx, dy), angle, mirrorx, scale);
72  }
73  }
74 
76  if (mirrorx) {
77  return new Transform(this.v.add(v.invertX()), angle, mirrorx, scale);
78  } else {
79  return new Transform(this.v.add(v), angle, mirrorx, scale);
80  }
81  }
82 
83  public Transform transform(Transform child) {
84  Transform result;
85  if (child.mirrorx) {
86  result = new Transform(child.v.multiply(scale).rotate(-angle).add(v), child.angle, child.mirrorx, child.scale);
87  } else {
88  result = new Transform(child.v.multiply(scale).rotate(angle).add(v), child.angle, child.mirrorx, child.scale);
89  }
90  if (mirrorx) {
91  return result.mirrorX().scale(scale).rotate(angle);
92  } else {
93  return result.scale(scale).rotate(angle);
94  }
95  }
96 
97  public Point transform(Point point) {
98  Vector result = new Vector(point);
99  if (mirrorx) {
100  result = result.invertX();
101  }
102  return result.multiply(scale).rotate(angle).add(v).asPoint();
103  }
104 
105  public Point transform(double x, double y) {
106  Vector result = new Vector(x, y);
107  if (mirrorx) {
108  result = result.invertX();
109  }
110  return result.multiply(scale).rotate(angle).add(v).asPoint();
111  }
112 
113  public double transform(double x) {
114  return x * scale;
115  }
116 
118  Transform result = child.rotate(-angle).scale(1 / scale);
119  if (mirrorx) {
120  result.mirrorX();
121  }
122  return new Transform(result.v.substract(v).rotate(-angle).multiply(1 / scale), result.angle, result.mirrorx,
123  result.scale);
124  }
125 
127  Vector result = new Vector(p);
128  if (mirrorx) {
129  result = result.invertX();
130  }
131  return result.substract(v).rotate(-angle).multiply(1 / scale).asPoint();
132  }
133 
134  public Transform setTranslation(double dx, double dy) {
135  return new Transform(new Vector(dx, dy), angle, mirrorx, scale);
136  }
137 
138  public Transform setdx(double dx) {
139  return new Transform(v.setdx(dx), angle, mirrorx, scale);
140  }
141 
142  public Transform setdy(double dy) {
143  return new Transform(v.setdy(dy), angle, mirrorx, scale);
144  }
145 
146  public double getdx() {
147  return v.getdx();
148  }
149 
150  public double getdy() {
151  return v.getdy();
152  }
153 
154  public double getAngle() {
155  return angle;
156  }
157 
158  public double getScale() {
159  return scale;
160  }
161 
162  public Transform setAngle(double angle) {
163  return new Transform(v, angle, mirrorx, scale);
164  }
165 
166  public boolean getMirrorX() {
167  return mirrorx;
168  }
169 
170  @Override
171  public String toString() {
172  return "Transform{" + "p=" + v + ", angle=" + angle + ", scale=" + scale + '}';
173  }
174 }
Geometrische Transformation.
Definition: Transform.java:13
Transform rotate(double angle)
Definition: Transform.java:34
Point transform(double x, double y)
Definition: Transform.java:105
Transform scale(double factor)
Definition: Transform.java:59
Transform transformBack(Transform child)
Definition: Transform.java:117
Transform translate(double dx, double dy)
Definition: Transform.java:67
Transform scalePositionAt(double x, double y, double factor)
Definition: Transform.java:63
Transform setAngle(double angle)
Definition: Transform.java:162
Transform setTranslation(double dx, double dy)
Definition: Transform.java:134
Transform rotate(double x, double y, double angle)
Definition: Transform.java:43
Transform transform(Transform child)
Definition: Transform.java:83
Vector rotate(double dAngle)
Definition: Vector.java:337
Vector substract(Vector v)
Definition: Vector.java:259
Vector setdx(double newdx)
Definition: Vector.java:234
Vector setdy(double newdy)
Definition: Vector.java:237
Impressum