Projekt "Serverbahn"

Mathevv

Spieler
4 Jun 2016
90
@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))
 

Sumpfhytte

Serverteam
Buddy
11 Aug 2014
5.613
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 ...
 

Morock

Spender
26 Jun 2015
748
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_

Sumpfhytte

Serverteam
Buddy
11 Aug 2014
5.613
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

Morock

Spender
26 Jun 2015
748
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:

Morock

Spender
26 Jun 2015
748
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:

Sumpfhytte

Serverteam
Buddy
11 Aug 2014
5.613
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!
 

Wulfens

Spieler
1 Jun 2018
436
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
 

Sumpfhytte

Serverteam
Buddy
11 Aug 2014
5.613
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
 

Benutzer, die dieses Thema gerade lesen

ONLINE 76 Spieler