Compare commits
3 Commits
7fea13b9b3
...
main
Author | SHA1 | Date | |
---|---|---|---|
5f15f03d92 | |||
9908656813 | |||
b439030fee |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
bin/uebung10/logo/BlackForest.class
Normal file
BIN
bin/uebung10/logo/BlackForest.class
Normal file
Binary file not shown.
Binary file not shown.
BIN
bin/uebung10/logo/HanselGretelTest.class
Normal file
BIN
bin/uebung10/logo/HanselGretelTest.class
Normal file
Binary file not shown.
BIN
bin/uebung10/logo/HanselGretelVisitor$1.class
Normal file
BIN
bin/uebung10/logo/HanselGretelVisitor$1.class
Normal file
Binary file not shown.
BIN
bin/uebung10/logo/HanselGretelVisitor$2.class
Normal file
BIN
bin/uebung10/logo/HanselGretelVisitor$2.class
Normal file
Binary file not shown.
BIN
bin/uebung10/logo/HanselGretelVisitor$3.class
Normal file
BIN
bin/uebung10/logo/HanselGretelVisitor$3.class
Normal file
Binary file not shown.
BIN
bin/uebung10/logo/HanselGretelVisitor$State.class
Normal file
BIN
bin/uebung10/logo/HanselGretelVisitor$State.class
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,46 +0,0 @@
|
|||||||
package uebung07.quantities.plain;
|
|
||||||
|
|
||||||
import static uebung07.quantities.plain.LengthUnit.METER;
|
|
||||||
import static uebung07.quantities.plain.TimeUnit.SECOND;
|
|
||||||
import static uebung07.quantities.plain.VelocityUnit.METER_PER_SECOND;
|
|
||||||
|
|
||||||
public class Length extends Quantity {
|
|
||||||
private final LengthUnit unit;
|
|
||||||
|
|
||||||
public Length(double value, LengthUnit unit) {
|
|
||||||
super(value, unit);
|
|
||||||
this.unit = unit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Length plus(Length other) {
|
|
||||||
return new Length(value + other.getBaseValue() / unit.baseFactor, unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Length minus(Length other) {
|
|
||||||
return new Length(value - other.getBaseValue() / unit.baseFactor, unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Length mult(double f) {
|
|
||||||
return new Length(value * f, unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Length div(double f) {
|
|
||||||
return new Length(value / f, unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Length to(LengthUnit unit) {
|
|
||||||
return new Length(getBaseValue() / unit.baseFactor, unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
public double div(Length other) {
|
|
||||||
return getBaseValue() / other.getBaseValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Velocity div(Time t) {
|
|
||||||
return new Velocity(this.value(METER) / t.value(SECOND), METER_PER_SECOND);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Time div(Velocity v) {
|
|
||||||
return new Time(this.value(METER) / v.value(METER_PER_SECOND), SECOND);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,14 +0,0 @@
|
|||||||
package uebung07.quantities.plain;
|
|
||||||
|
|
||||||
public class LengthUnit extends Unit {
|
|
||||||
public LengthUnit(String name, double baseFactor) {
|
|
||||||
super(name, baseFactor);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final LengthUnit METER = new LengthUnit("m", 1);
|
|
||||||
public static final LengthUnit MILLIMETER = new LengthUnit("mm", 0.001);
|
|
||||||
public static final LengthUnit KILOMETER = new LengthUnit("km", 1000);
|
|
||||||
public static final LengthUnit MILE = new LengthUnit("mi", 1609.344);
|
|
||||||
public static final LengthUnit LIGHTYEAR = new LengthUnit("ly", 9460730472580800.0);
|
|
||||||
public static final LengthUnit PARSEC = new LengthUnit("pc", 3.0856776e16);
|
|
||||||
}
|
|
@@ -1,60 +0,0 @@
|
|||||||
package uebung07.quantities.plain;
|
|
||||||
|
|
||||||
import static uebung07.quantities.plain.LengthUnit.KILOMETER;
|
|
||||||
import static uebung07.quantities.plain.LengthUnit.MILE;
|
|
||||||
import static uebung07.quantities.plain.LengthUnit.MILLIMETER;
|
|
||||||
import static uebung07.quantities.plain.LengthUnit.PARSEC;
|
|
||||||
import static uebung07.quantities.plain.TimeUnit.HOUR;
|
|
||||||
import static uebung07.quantities.plain.TimeUnit.MINUTE;
|
|
||||||
import static uebung07.quantities.plain.TimeUnit.SECOND;
|
|
||||||
import static uebung07.quantities.plain.VelocityUnit.KMH;
|
|
||||||
import static uebung07.quantities.plain.VelocityUnit.METER_PER_SECOND;
|
|
||||||
import static uebung07.quantities.plain.VelocityUnit.MPH;
|
|
||||||
|
|
||||||
public class PlainQuantitiesDemo {
|
|
||||||
public static void main(String[] args) {
|
|
||||||
final Length l1 = new Length(1, KILOMETER);
|
|
||||||
final Length l2 = new Length(1200, MILLIMETER);
|
|
||||||
final Length l3 = new Length(1, MILE);
|
|
||||||
|
|
||||||
System.out.println(l1);
|
|
||||||
System.out.println(l2);
|
|
||||||
System.out.println(l1 + " + " + l2 + " = " + l1.plus(l2));
|
|
||||||
System.out.println(l1 + " + " + l2 + " (in mm) = " + l1.plus(l2).to(MILLIMETER));
|
|
||||||
|
|
||||||
System.out.println(l3 + " / " + l1 + " = " + l3.div(l1));
|
|
||||||
|
|
||||||
final Time t1 = new Time(100, SECOND);
|
|
||||||
final Time t2 = new Time(5, HOUR);
|
|
||||||
|
|
||||||
System.out.println(t1);
|
|
||||||
System.out.println(t2);
|
|
||||||
System.out.println(t1.plus(t2));
|
|
||||||
System.out.println(t1.plus(t2).to(MINUTE));
|
|
||||||
|
|
||||||
final Velocity v1 = new Velocity(12, KMH);
|
|
||||||
final Velocity v2 = new Velocity(100, METER_PER_SECOND);
|
|
||||||
|
|
||||||
System.out.println(v1);
|
|
||||||
System.out.println(v2);
|
|
||||||
System.out.println(v2.to(KMH));
|
|
||||||
System.out.println(v1.plus(v2));
|
|
||||||
|
|
||||||
final Length l4 = new Length(300, KILOMETER).to(PARSEC);
|
|
||||||
final Time t3 = new Time(2, HOUR);
|
|
||||||
final Velocity v3 = l4.div(t3);
|
|
||||||
System.out.println(l4 + " / " + l3 + " = " + v3);
|
|
||||||
|
|
||||||
System.out.println(v1 + " * " + t1 + " = " + v1.mult(t1).to(KILOMETER));
|
|
||||||
|
|
||||||
final Length l5 = v3.mult(t1.to(HOUR));
|
|
||||||
System.out.println(v3 + " * " + t1 + " = " + l5);
|
|
||||||
|
|
||||||
final Time t5 = l4.div(v2);
|
|
||||||
System.out.println(l4 + " / " + v2 + " = " + t5.to(MINUTE));
|
|
||||||
|
|
||||||
Velocity v5 = new Velocity(55, MPH);
|
|
||||||
System.out.println(v5 + " = " + v5.format("%4.1f %s", KMH));
|
|
||||||
System.out.println((v5.mult(new Time(30, MINUTE)).to(MILE)));
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,28 +0,0 @@
|
|||||||
package uebung07.quantities.plain;
|
|
||||||
|
|
||||||
public abstract class Quantity {
|
|
||||||
public final double value;
|
|
||||||
public final Unit unit;
|
|
||||||
|
|
||||||
protected Quantity(double value, Unit unit) {
|
|
||||||
this.value = value;
|
|
||||||
this.unit = unit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getBaseValue() {
|
|
||||||
return value * unit.baseFactor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double value(Unit unit) {
|
|
||||||
return getBaseValue() / unit.baseFactor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return value + " " + unit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String format(String fmt, Unit unit) {
|
|
||||||
return String.format(fmt, value(unit), unit);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,41 +0,0 @@
|
|||||||
package uebung07.quantities.plain;
|
|
||||||
|
|
||||||
import static uebung07.quantities.plain.LengthUnit.METER;
|
|
||||||
|
|
||||||
public class Time extends Quantity{
|
|
||||||
private final TimeUnit unit;
|
|
||||||
|
|
||||||
public Time(double value, TimeUnit unit) {
|
|
||||||
super(value, unit);
|
|
||||||
this.unit = unit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Time plus(Time other) {
|
|
||||||
return new Time( value + other.getBaseValue() / unit.baseFactor, unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Time minus(Time other) {
|
|
||||||
return new Time( value - other.getBaseValue() / unit.baseFactor, unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Time mult(double f) {
|
|
||||||
return new Time( value * f, unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Time div(double f) {
|
|
||||||
return new Time( value / f, unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Time to(TimeUnit unit) {
|
|
||||||
return new Time(getBaseValue() / unit.baseFactor, unit)
|
|
||||||
}
|
|
||||||
|
|
||||||
public double div(Time other) {
|
|
||||||
return getBaseValue() / other.getBaseValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Length mult(Velocity v) {
|
|
||||||
return new Length(this.value(METER), METER);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,16 +0,0 @@
|
|||||||
package uebung07.quantities.plain;
|
|
||||||
|
|
||||||
public abstract class Unit {
|
|
||||||
public final String name;
|
|
||||||
public final double baseFactor;
|
|
||||||
|
|
||||||
public Unit(String name, double baseFactor) {
|
|
||||||
this.name = name;
|
|
||||||
this.baseFactor = baseFactor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
}
|
|
11
src/uebung10/logo/BlackForest.java
Normal file
11
src/uebung10/logo/BlackForest.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package uebung10.logo;
|
||||||
|
|
||||||
|
public class BlackForest implements DarkForest{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breadCrumb(double x, double y) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'breadCrumb'");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -7,9 +7,8 @@ public class Go implements Stmt{
|
|||||||
public Go(double dist) {
|
public Go(double dist) {
|
||||||
if (dist < 0) {
|
if (dist < 0) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
} else {
|
|
||||||
this.dist = dist;
|
|
||||||
}
|
}
|
||||||
|
this.dist = dist;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
30
src/uebung10/logo/HanselGretelTest.java
Normal file
30
src/uebung10/logo/HanselGretelTest.java
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package uebung10.logo;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
|
||||||
|
public class HanselGretelTest {
|
||||||
|
|
||||||
|
public static final double EPS = 1e-10;
|
||||||
|
public static final Stmt PROG = new Sequence(new PenDown(), new Go(50),
|
||||||
|
new Turn(120), new Go(50),
|
||||||
|
new Turn(120), new Go(50));
|
||||||
|
|
||||||
|
private Turtle turtle;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
turtle = new Turtle(2, 1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void TestTriangle() {
|
||||||
|
final Visitor<Void> visitor = new HanselGretelVisitor(10, turtle, new BlackForest()); //final ist egal
|
||||||
|
PROG.accept(visitor);
|
||||||
|
assertEquals(2, turtle.getX(), EPS);
|
||||||
|
assertEquals(1, turtle.getY(), EPS);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -1,11 +1,12 @@
|
|||||||
package uebung10.logo;
|
package uebung10.logo;
|
||||||
|
|
||||||
public class HanselGretelVisitor implements Visitor<Turtle> {
|
public class HanselGretelVisitor implements Visitor<Void> {
|
||||||
|
|
||||||
private double gap;
|
private double gap;
|
||||||
private double s;
|
private double s;
|
||||||
private Turtle turtle;
|
private Turtle turtle;
|
||||||
private DarkForest forest;
|
private DarkForest forest;
|
||||||
|
private State state;
|
||||||
|
|
||||||
public HanselGretelVisitor(double s, Turtle turtle, DarkForest forest) {
|
public HanselGretelVisitor(double s, Turtle turtle, DarkForest forest) {
|
||||||
this.s = s;
|
this.s = s;
|
||||||
@@ -13,6 +14,118 @@ public class HanselGretelVisitor implements Visitor<Turtle> {
|
|||||||
this.forest = forest;
|
this.forest = forest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visit(PenUp penUp) {
|
||||||
|
up();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visit(PenDown penDown) {
|
||||||
|
down();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visit(Turn turn) {
|
||||||
|
turtle.turn(turn.angle);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visit(Sequence sequence) {
|
||||||
|
for(Stmt elem :sequence.seq) {
|
||||||
|
elem.accept(this);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visit(Go go) {
|
||||||
|
go(go.dist);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void breadCrumb() {
|
||||||
|
forest.breadCrumb(turtle.getX(), turtle.getY());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void layTrail(double d) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'layTrail'");
|
||||||
|
}
|
||||||
|
|
||||||
|
private abstract class State {
|
||||||
|
abstract void go(double dist);
|
||||||
|
abstract void up();
|
||||||
|
abstract void down();
|
||||||
|
}
|
||||||
|
|
||||||
|
private final State longUpState = new State(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void go(double d) {turtle.go(d);}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void down(){
|
||||||
|
breadCrumb();
|
||||||
|
state = downState;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void up() {}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
private final State downState = new State(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void go(double d){
|
||||||
|
layTrail(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void up(){state = shortUpState;}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void down() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
private final State shortUpState = new State() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void go(double dist) {
|
||||||
|
turtle.go(dist);
|
||||||
|
gap = gap + dist;
|
||||||
|
|
||||||
|
if (gap < s) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
gap = 0;
|
||||||
|
state = longUpState;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void up() {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void down() {
|
||||||
|
state = downState;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
private void go(double d) {
|
||||||
|
state.go(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void down() {
|
||||||
|
state.down();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void up() {
|
||||||
|
state.up();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -5,7 +5,7 @@ public class Sequence implements Stmt {
|
|||||||
public final Stmt[] seq;
|
public final Stmt[] seq;
|
||||||
|
|
||||||
public Sequence(Stmt... seq) {
|
public Sequence(Stmt... seq) {
|
||||||
this.seq = seq;
|
this.seq = seq.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user