Closed funketh closed 4 years ago
Fortsetzung der angefangenen Diskussion aus #26
Wie wäre es, wenn Road
auch noch zwei Point
Objekte hat? Dann wäre die Erstellreihenfolge 2 * Point
-> Road
-> Vertex
. Dabei haben wir die points
wieder nur für die Koordinaten und der Vertex
verweist auf die Road
und umgekehrt. Dann kann man die Anchor halt meinetwegen weglassen.
Eine vollständige Implementation der Idee aus #26:
using System.Collections.Generic;
namespace DataTypes
{
public struct RoadView
{
public Vertex otherVertex;
public Point point;
public List<Lane> startingLanes;
public RoadView(Vertex otherVertex, Point point, List<Lane> startingLanes)
{
this.otherVertex = otherVertex;
this.point = point;
this.startingLanes = startingLanes;
}
}
public class Road
{
public float length;
public RoadShape shape;
private Dictionary<Vertex, RoadView> _roadViews;
public Road(float length, RoadShape shape, Vertex vertex1, Vertex vertex2,
Point point1, Point point2, List<Lane> startingLanes, List<Lane> endingLanes)
{
this.length = length;
this.shape = shape;
_roadViews = new Dictionary<Vertex, RoadView>
{
{vertex1, new RoadView(vertex2, point1, startingLanes)},
{vertex2, new RoadView(vertex1, point2, endingLanes)}
};
}
public Vertex OtherVertex(Vertex vertex)
{
return _roadViews[vertex].otherVertex;
}
public Point EndsAt(Vertex vertex)
{
return _roadViews[vertex].point;
}
public List<Lane> StartingLanes(Vertex vertex)
{
return _roadViews[vertex].startingLanes;
}
public List<Lane> EndingLanes(Vertex vertex)
{
return StartingLanes(OtherVertex(vertex));
}
}
}
Der Punkt ist, dass man entweder:
Beides nicht super schön, aber ich tendiere zum 2. Ansatz (also nicht der, den ich hier implementierte).
Implementation des 2. Ansatzes
public class RoadView : Point {
public RoadView other;
public List<Lane> outgoingLanes;
public List<Lane> incomingLanes {
get => other.outgoingLanes;
set => other.outgoingLanes = value;
}
private float _length;
public float length {
get => _length;
set => _length = other._length = value;
}
private RoadShape _shape;
public RoadShape shape {
get => _shape;
set => _shape = other._shape = value;
}
}
public class Edge : RoadView {
public Vertex vertex;
}
~Originally posted by @funketh in https://github.com/rrickfox/traffic-sim/issues/14#issuecomment-576053279~
Verschoben nach: #29