Projekt "Serverbahn"

@Morock war zwar schneller, aber auch ich habe ein simples (Python-) Script geschrieben, dass diese Aufgabe löst.

Ich habe damit exemplarisch die erste Aufgabe und die Schnittpunkte AB&Z und BE&X der zweiten Aufgabe gelöst. Meine Ergebnisse decken sich dabei mit denen von Morock.

Hier ist das Script. Wer Python nicht installiert hat, kann es auch online (z.B. hier) ausführen.
Anzugeben ist dabei die X/Z Koordinaten der beiden Punkte (Reihenfolge egal) und ob die Linie, also das Niemandsland, vertikal oder horizontal verläuft mit entsprechender Koordinate.
Code:
# Eingabe der Punkte
pointA_X = int(input("Erster Punkt, X: "))
pointA_Z = int(input("Erster Punkt, Z: "))
pointB_X = int(input("Zweiter Punkt, X: "))
pointB_Z = int(input("Zweiter Punkt, Z: "))

dist_BA_X = pointB_X - pointA_X
dist_BA_Z = pointB_Z - pointA_Z

line_direction = input("'v' für vertikale Linie, 'h' für horizontale Linie: ")

# Berechnung in Abhängigkeit der Linienausrichtung
if line_direction == "v":
    line_X = int(input("X-Koordinate der Linie: "))

    dist_h = line_X - pointA_X
    dist_v = dist_BA_Z * dist_h / dist_BA_X
    pos_x = line_X
    pos_z = pointA_Z + dist_v

elif line_direction == "h":
    line_Z = int(input("Z-Koordinate der Linie: "))

    dist_v = line_Z - pointA_Z
    dist_h = dist_BA_X * dist_v / dist_BA_Z
    pos_x = pointA_X + dist_h
    pos_z = line_Z

else:
    print("Fehlerhafte Eingabe")

print("Schnittpunkt (X|Z): {0:.2f} | {1:.2f}".format(pos_x, pos_z))
 
Großartig, vielen Dank für eure Hilfe! Während Graf Karto noch mit Millimeterpapier und Geodreieck an seinen Parallelverschiebungen sitzt, kann ich jetzt eure Python-Scripte nutzen, um auch die letzten Aufgaben zu lösen:

Schnitt3.PNG

Gegeben sind die Punkte
A (-1561 / -1535) (Hochfurth)​
B (-2477 / -976)​
C (-2920 / -2618)​
D (-1863 / -3585)​
E (-1579 / -1782)​
F (-1043 / -2330)​
G (-3684 / -2086)​
H (-5351 / -1031)​
I (-3638 / -1792)​
und die Geraden
Z = -2024​
X1 = -2024​
X2 = -4024.​
Gesucht sind die Schnittpunkte
1 zwischen AB und X1​
2 zwischen AC und X1​
3 zwischen AC und Z​
4 zwischen CD und X1​
5 zwischen EF und Z​
6 zwischen GH und Z​
7 zwischen GH und X2​
8 zwischen GI und Z.​

Schnitt4.PNG

Gegeben sind die Punkte
A (-1778 / 1716) (Tempelhof)​
B (-984 / 3000)​
C (-2948 / 3026)​
D (-3001 / 96)​
E (-3783 / 2066)​
F (-5046 / 1020)​
G (-1916 / 3519)​
und die Geraden
Z = 2024​
X = -2024.​
Gesucht sind die Schnittpunkte
1 zwischen AB und Z​
2 zwischen AC und X​
3 zwischen AC und Z​
4 zwischen AD und X​
5 zwischen DE und Z​
6 zwischen EF und Z​
7 zwischen CG und X.​

Schnitt5.PNG

Wer jetzt denkt, das war alles, hat die Spawnzone vergessen, denn die ist auch ein eigener Server und hat demzufolge ihre eigene Teil-Zonenkarte:
Gegeben sind die Punkte
A (-134 / 99) (Hauptbahnhof)​
B (-591 / -282)​
C (642 / -288)​
D (-247 / 357)​
E (444 / 944)​
und die Geraden
Z1 = -157​
Z2 = 172​
X1 = -227​
X2 = 185.​
Gesucht sind die Schnittpunkte
1 zwischen AB und X1​
2 zwischen AC und X2​
3 zwischen AD und Z2​
4 zwischen AE und Z2.​

Wer noch nicht genug hat, kann ja mal ausrechnen, wie viele Linien ich jetzt für den Streckenplan ziehen muss. Ich bin auf genau 100 Stück gekommen. Und für jede Linie muss ich drei Befehle eingeben: Startpunkt definieren, Zielpunkt definieren und Linie ziehen. Dann werde ich mir mal diese 300 Befehle vorbereiten. Puh, was für eine Arbeit ...
 
Wenn du mir sagst, wie die Syntax der Befehle ist, kann ich deine Befehle gleich auch ausdrucken lassen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Wertungen: ResQ_
Du meinst die 100 Linien ausdrucken? Die Arbeit besteht jetzt eher darin, die 300 Befehle vorzubereiten, indem ich die Koordinaten der 27 Schnittpunkte berechne und zusammen mit den Koordinaten der 59 Bahnhöfe in der richtigen Kombination einsetze und die Linien mit der richtigen Linienfarbe und Beschriftung ziehe.
 
  • Gefällt mir
Wertungen: TischGetreide10
Die Dynmap-Befehle der 200 (noch nicht eingefärbten) Linien wären jedenfalls leicht in mein Programm einzufügen, wenn ich die Sytax weiß.

Ich schreib mir gerade ein Skript, was deinen Text in Pythoncode umwandelt, den ich dann ausführen kann. Bin gleich fertig.


Python:
#Sumpfhyttes Text in Python-Code Konvertieren
def pystring(aufgabe):
    for string in aufgabe:
        pystring="schnitt("+string[11]+", "+string[12]+", "+string[18].lower()+"="+string[18:-1]+")"
        print(pystring)

print("\n\n\n\nAufgabe 3")
Aufgabe3=["1 zwischen AB und X1", "2 zwischen AC und X1", "3 zwischen AC und Z", "4 zwischen CD und X1", "5 zwischen EF und Z", "6 zwischen GH und Z", "7 zwischen GH und X2", "8 zwischen GI und Z"]
pystring(Aufgabe3)
print("\n\n\n\nAufgabe 4")
Aufgabe4=["1 zwischen AB und Z", "2 zwischen AC und X", "3 zwischen AC und Z", "4 zwischen AD und X", "5 zwischen DE und Z", "6 zwischen EF und Z", "7 zwischen CG und X"]
pystring(Aufgabe4)
print("\n\n\n\nAufgabe 5")
Aufgabe5=["1 zwischen AB und X1", "2 zwischen AC und X2", "3 zwischen AD und Z2", "4 zwischen AE und Z2"]
pystring(Aufgabe5)
 
Zuletzt bearbeitet:
Python:
#Sumpfhyttes Text in Python-Code Konvertieren
def pystring(aufgabe):
    for string in aufgabe:
        pystring="schnitt("+string[11]+", "+string[12]+", "+string[18].lower()+"="+string[18:-1]+")"
        print(pystring)

print("\n\n\n\nAufgabe 3")
Aufgabe3=["1 zwischen AB und X1", "2 zwischen AC und X1", "3 zwischen AC und Z", "4 zwischen CD und X1", "5 zwischen EF und Z", "6 zwischen GH und Z", "7 zwischen GH und X2", "8 zwischen GI und Z"]
pystring(Aufgabe3)
print("\n\n\n\nAufgabe 4")
Aufgabe4=["1 zwischen AB und Z", "2 zwischen AC und X", "3 zwischen AC und Z", "4 zwischen AD und X", "5 zwischen DE und Z", "6 zwischen EF und Z", "7 zwischen CG und X"]
pystring(Aufgabe4)
print("\n\n\n\nAufgabe 5")
Aufgabe5=["1 zwischen AB und X1", "2 zwischen AC und X2", "3 zwischen AD und Z2", "4 zwischen AE und Z2"]
pystring(Aufgabe5)


#Schnittpunkte berechnen und ausdrucken
def isNaN(num):
    return num != num

def schnitt(A, B, x=float("nan"),z=float("nan")):
    x1,z1=A
    x2,z2=B
    print("Serverwechsel zwischen = (%.0f, %.0f) und = (%.0f, %.0f) ==> "%( x1,z1, x2,z2 ),end="")  #Das "end=''" funktioniert nicht auf http://www.python-online.ch/pyonline
    if(isNaN(x)):
        x = x1 + (x2-x1)/(z2-z1) * (z-z1)
        print("(%.3f, %.0f    )"%( x,z ))
    elif(isNaN(z)):
        z = z1 + (z2-z1)/(x2-x1) * (x-x1)
        print("(%.0f    , %.3f)"%( x,z ))
    else:
        print("  FEHLER: Schnittpunkt ueberbestimmt")
        print("  Beispieleingabe:  schnitt(x1,z1, x2,z2, z=z0)")
        print("             oder:  schnitt(x1,z1, x2,z2, x=x0)")
    if( ( (x1-x)>0 and (x2-x)>0 ) or ( (x1-x)<0 and (x2-x)<0 ) ):
        print("  Plausibilitaets-FEHLER: x=%.3f liegt nicht zwischen %.0f und %.0f"%( x,x1,x2))
    if( ( (z1-z)>0 and (z2-z)>0 ) or ( (z1-z)<0 and (z2-z)<0 ) ):
        print("  Plausibilitaets-FEHLER: z=%.3f liegt nicht zwischen %.0f und %.0f"%( z,z1,z2))
    return x,z




print("\n\n\n\nAufgabe 1")
#Insgesamt gibt es vier Aufgaben. Fangen wir mit der leichtesten an. Gegeben sind die Punkte
A = (1864, 1609) #=(Ziegeldorf)
B = (1170, 2520)
C = (2313, 1664)
#und die Geraden
Z = 2024
X = 2024.
#Gesucht sind die Schnittpunkte
print("1 zwischen AB und Z")
print("2 zwischen AC und X")
schnitt(A, B, z=Z)
schnitt(A, C, x=X)


print("\n\n\n\nAufgabe 2")
#Gegeben sind die Punkte
A = (1631, -1845) #(Modern City)
B = (2929, -2918)
C = (1333, -2239)
D = (2686, -1011)
E = (1952, -3517)
F = (3498, -1975)
#und die Geraden
Z = -2024
X = 2024.
#Gesucht sind die Schnittpunkte
print("1 zwischen AB und Z")
print("2 zwischen AB und X")
print("3 zwischen AC und Z")
print("4 zwischen AD und X")
print("5 zwischen BE und X")
print("6 zwischen BF und Z")
schnitt(A, B, z=Z)
schnitt(A, B, x=X)
schnitt(A, C, z=Z)
schnitt(A, D, x=X)
schnitt(B, E, x=X)
schnitt(B, F, z=Z)


print("\n\n\n\nAufgabe 3")
#Gegeben sind die Punkte
A = (-1561, -1535) #(Hochfurth)
B = (-2477, -976)
C = (-2920, -2618)
D = (-1863, -3585)
E = (-1579, -1782)
F = (-1043, -2330)
G = (-3684, -2086)
H = (-5351, -1031)
I = (-3638, -1792)
#und die Geraden
Z = -2024
X1 = -2024
X2 = -4024
#Gesucht sind die Schnittpunkte
print("1 zwischen AB und X1")
print("2 zwischen AC und X1")
print("3 zwischen AC und Z")
print("4 zwischen CD und X1")
print("5 zwischen EF und Z")
print("6 zwischen GH und Z")
print("7 zwischen GH und X2")
print("8 zwischen GI und Z")

schnitt(A, B, x=X1)
schnitt(A, C, x=X1)
schnitt(A, C, z=Z)
schnitt(C, D, x=X1)
schnitt(E, F, z=Z)
schnitt(G, H, z=Z)
schnitt(G, H, x=X2)
schnitt(G, I, z=Z)


print("\n\n\n\nAufgabe 4")
#Gegeben sind die Punkte
A = (-1778, 1716) #= (Tempelhof)
B = (-984, 3000)
C = (-2948, 3026)
D = (-3001, 96)
E = (-3783, 2066)
F = (-5046, 1020)
G = (-1916, 3519)
#und die Geraden
Z = 2024
X = -2024.
#Gesucht sind die Schnittpunkte
print("1 zwischen AB und Z")
print("2 zwischen AC und X")
print("3 zwischen AC und Z")
print("4 zwischen AD und X")
print("5 zwischen DE und Z")
print("6 zwischen EF und Z")
print("7 zwischen CG und X")

schnitt(A, B, z=Z)
schnitt(A, C, x=X)
schnitt(A, C, z=Z)
schnitt(A, D, x=X)
schnitt(D, E, z=Z)
schnitt(E, F, z=Z)
schnitt(C, G, x=X)


print("\n\n\n\nAufgabe 4")
#Wer jetzt denkt, das war alles, hat die Spawnzone vergessen, denn die ist auch ein eigener Server und hat demzufolge ihre eigene Teil-Zonenkarte:
#Gegeben sind die Punkte
A = (-134, 99) #= (Hauptbahnhof)
B = (-591, -282)
C = (642, -288)
D = (-247, 357)
E = (444, 944)
#und die Geraden
Z1 = -157
Z2 = 172
X1 = -227
X2 = 185.
#Gesucht sind die Schnittpunkte
print("1 zwischen AB und X1")
print("2 zwischen AC und X2")
print("3 zwischen AD und Z2")
print("4 zwischen AE und Z2")

schnitt(A, B, x=X1)
schnitt(A, C, x=X2)
schnitt(A, D, z=Z2)
schnitt(A, E, z=Z2)



Python:
Aufgabe 1
1 zwischen AB und Z
2 zwischen AC und X
Serverwechsel zwischen = (1864, 1609) und = (1170, 2520) ==> (1547.853, 2024    )
Serverwechsel zwischen = (1864, 1609) und = (2313, 1664) ==> (2024    , 1628.599)




Aufgabe 2
1 zwischen AB und Z
2 zwischen AB und X
3 zwischen AC und Z
4 zwischen AD und X
5 zwischen BE und X
6 zwischen BF und Z
Serverwechsel zwischen = (1631, -1845) und = (2929, -2918) ==> (1847.535, -2024    )
Serverwechsel zwischen = (1631, -1845) und = (2929, -2918) ==> (2024    , -2169.876)
Serverwechsel zwischen = (1631, -1845) und = (1333, -2239) ==> (1495.614, -2024    )
Serverwechsel zwischen = (1631, -1845) und = (2686, -1011) ==> (2024    , -1534.325)
Serverwechsel zwischen = (2929, -2918) und = (1952, -3517) ==> (2024    , -3472.857)
Serverwechsel zwischen = (2929, -2918) und = (3498, -1975) ==> (3468.434, -2024    )




Aufgabe 3
1 zwischen AB und X1
2 zwischen AC und X1
3 zwischen AC und Z
4 zwischen CD und X1
5 zwischen EF und Z
6 zwischen GH und Z
7 zwischen GH und X2
8 zwischen GI und Z
Serverwechsel zwischen = (-1561, -1535) und = (-2477, -976) ==> (-2024    , -1252.449)
Serverwechsel zwischen = (-1561, -1535) und = (-2920, -2618) ==> (-2024    , -1903.969)
Serverwechsel zwischen = (-1561, -1535) und = (-2920, -2618) ==> (-2174.620, -2024    )
Serverwechsel zwischen = (-2920, -2618) und = (-1863, -3585) ==> (-2024    , -3437.709)
Serverwechsel zwischen = (-1579, -1782) und = (-1043, -2330) ==> (-1342.299, -2024    )
Serverwechsel zwischen = (-3684, -2086) und = (-5351, -1031) ==> (-3781.966, -2024    )
Serverwechsel zwischen = (-3684, -2086) und = (-5351, -1031) ==> (-4024    , -1870.823)
Serverwechsel zwischen = (-3684, -2086) und = (-3638, -1792) ==> (-3674.299, -2024    )




Aufgabe 4
1 zwischen AB und Z
2 zwischen AC und X
3 zwischen AC und Z
4 zwischen AD und X
5 zwischen DE und Z
6 zwischen EF und Z
7 zwischen CG und X
Serverwechsel zwischen = (-1778, 1716) und = (-984, 3000) ==> (-1587.539, 2024    )
Serverwechsel zwischen = (-1778, 1716) und = (-2948, 3026) ==> (-2024    , 1991.436)
Serverwechsel zwischen = (-1778, 1716) und = (-2948, 3026) ==> (-2053.084, 2024    )
Serverwechsel zwischen = (-1778, 1716) und = (-3001, 96) ==> (-2024    , 1390.146)
Serverwechsel zwischen = (-3001, 96) und = (-3783, 2066) ==> (-3766.328, 2024    )
Serverwechsel zwischen = (-3783, 2066) und = (-5046, 1020) ==> (-3833.713, 2024    )
Serverwechsel zwischen = (-2948, 3026) und = (-1916, 3519) ==> (-2024    , 3467.407)




Aufgabe 4
1 zwischen AB und X1
2 zwischen AC und X2
3 zwischen AD und Z2
4 zwischen AE und Z2
Serverwechsel zwischen = (-134, 99) und = (-591, -282) ==> (-227    , 21.466)
Serverwechsel zwischen = (-134, 99) und = (642, -288) ==> (185    , -60.089)
Serverwechsel zwischen = (-134, 99) und = (-247, 357) ==> (-165.973, 172    )
Serverwechsel zwischen = (-134, 99) und = (444, 944) ==> (-84.066, 172    )
 
Zuletzt bearbeitet:
Für alle, die jetzt den Faden verloren haben: Ich habe ihn auch verloren und mit Morock im TeamSpeak gesprochen. Jetzt habe ich verstanden, wie er mir helfen kann: Er generiert automatisch aus meinen Forentexten einen Teil der Befehle, die ich brauche und schickt mir das Ergebnis per Unterhaltung. Danke @Morock!
 
Das kann ich natürlich alles selbst berechnen, aber ich bin schlau und frage einfach den Kartografen unter unseren Dorfbewohnern. Der Typ nennt sich "Graf Karto" und macht immer so auf cool. Aber meine Frage nach den Schnittpunkten brachte ihn plötzlich mächtig ins Schwitzen.

Vielleicht könnt ihr ihm helfen, falls ihr ein Freund der Mathematik seid.
Ich fühle deinen Schmerz.
Für die jetzt neue Version des Liniennetzplans habe ich zur Definition der grafischen Darstellung der neu eingefügten Umkehrpunkte, damit es schneller geht, einstweilen auf eine vollständig mathematisch saubere Definition verzichtet und auch einen empirisch ermittelten Wert verwendet. ^^
pst-fkP.png
 
Der Streckenplan auf der Zonenkarte ist fertig. Damit ist das Projekt beendet.
Meine Schätzung für die Dauer: "Das kann ja nicht so lange dauern, zwei Wochen vielleicht."
Realität: Überraschenderweise gibt es immer noch etwas anderes zu tun. Und dann ist da auch noch das sogenannte "Real Life". Das Projekt hat (mit Pausen) zehn Wochen gedauert :D

Zur Feier des Tages gibt es ein kleines Suchevent => https://uwmc.de/p251056
 
Hallo, ich habe einen Vorschlag, für die S-Bahn: könnte man es nicht so manchen, das, wenn man in einen Bahnhof einfährt, angezeigt bekommt, welche Bahnlinien hier alles abfahren (zb: Es bestehen Umsteigemöglichkeiten nach: S1(Nord-ost/süd-west), S3.....). Das würde den Leuten helfen, die die S-Bahn noch nicht so genau kennen, aber in eine bestimmte Serverregion fahren wollen .

Ich habe das mal testweise für den Nordwestbahnhof gemacht:

Umstieg1.png


Wir haben einen Minecraft-Titel und einen Untertitel. Normalerweise steht der Bahnhof im Untertitel, weil lange Bahnhofsnamen den Titel sprengen würden.
Bei Umsteigebahnhöfen (wir haben 15 Stück) nehme ich den Bahnhof jetzt in den Titel, um den Untertitel frei zu haben. Zum Glück passen die Umsteigebahnhöfe alle in den Titel, der längste ist der "Nordwestbahnhof".
Auch der Untertitel ist längenmäßig begrenzt, wenn man im Standardfenster spielt, was wir beachten müssen. Die längsten Richtungen sind "Nordosten und Südwesten". Dann passt gerade noch ein "Umstieg zur S5" dazu, sonst nichts mehr: "Umstieg zur S5 Nordosten und Südwesten"

Ich werde das demnächst bei allen Umsteigebahnhöfen so machen.

Die Alternative wäre das kürzere "Nordost und Südost", dann wäre das möglich: "Umstieg zur S5 nach Nordost und Südwest". Aber wenn man dann auf dem Bahnsteig steht, lauten die dortigen Anzeigen "Nordosten" und "Südwesten" und das möchte ich nicht in allen Anzeigen auf allen Bahnhöfen verkürzen, das wäre zu viel Aufwand.
 
Bei Umsteigebahnhöfen (wir haben 15 Stück) nehme ich den Bahnhof jetzt in den Titel, um den Untertitel frei zu haben.
Könnte man die Umsteigemöglichkeiten nicht in die Actionbar packen, welche dann mit dem Titel gleichzeitig erscheint? Meiner Meinung nach ist diese Zusatzinformation dann sichtbar, würde aber auch nicht stören, um den Bildschirm nicht voll zu haben mit Titeln.
 
Auch der Untertitel ist längenmäßig begrenzt, wenn man im Standardfenster spielt, was wir beachten müssen. Die längsten Richtungen sind "Nordosten und Südwesten". Dann passt gerade noch ein "Umstieg zu" dazu, sonst nichts mehr: "Umstieg zu S5 Nordosten und Südwesten"

Ich werde das demnächst bei allen Umsteigebahnhöfen so machen.

Die Alternative wäre das kürzere "Nordost und Südost", dann wäre das möglich: "Umstieg zu S5 nach Nordost und Südwest". Aber wenn man dann auf dem Bahnsteig steht, lauten die dortigen Anzeigen "Nordosten" und "Südwesten" und das möchte ich nicht in allen Anzeigen auf allen Bahnhöfen verkürzen, das wäre zu viel Aufwand.

Und wenn man die Himmelsrichtungen komplett abkürzt, z.B NO für Nordosten usw? :hmm:
 
"Umstieg zur S4 nach N" oder "Umstieg zur S4 Richtung N" => Ich glaube, die Abkürzungen wird nicht jeder verstehen.

Ich habe auch den Vorschlag von @SirionBlatt ausprobiert:

Umstieg4.png


Der Nachteil ist, dass die Actionbar leicht hinter dem Chat verschwindet und leider auch schneller weg ist als Titel und Untertitel. Daher ist das leider ungeeignet.


Also bleibt es dabei:

Umstieg1.png
 

Benutzer, die dieses Thema gerade lesen

ONLINE 39 Spieler