Neueinsteiger plant Dart-Software
Das ist einfach lineare Algebra, „die Spalten der Matrix sind die Bilder der Basisvektoren“. Musste ich halt im Studium machen. Wenn du das nicht hattest, ist es auch nicht in 2 Minuten erklärt, und letztlich ja auch nicht so wichtig.
So, getestet.....wenn ich deine Matrix verwende, sind die Achsen getauscht, aber die Y-Achse ist ebenso wie die X-Achse invertiert
Wenn ich dann wieder das - vor die 1 setze, hängt der Mauspfeil am oberen Rand fest
Wenn ich in meiner ursprünglichen Matrix das - vor der 1 entferne, hängt er am unteren.
Wenn ich dann wieder das - vor die 1 setze, hängt der Mauspfeil am oberen Rand fest
Wenn ich in meiner ursprünglichen Matrix das - vor der 1 entferne, hängt er am unteren.
0 1 0
-1 0 1
0 0 1
"Meine Variante": X-/Y-Achsen korrekt, X-Achse invertiert
0 1 0
1 0 0
0 0 1
Deine Variante: X-/Y-Achsen korrekt, aber beide invertiert
0 1 0
-1 0 0
0 0 1
Deine Variante mit - vor der 1: Maus hängt am oberen Rand fest
0 1 0
1 0 1
0 0 1
"Meine" Variante ohne - vor der 1: Maus hängt am unteren Rand fest
-1 0 1
0 0 1
"Meine Variante": X-/Y-Achsen korrekt, X-Achse invertiert
0 1 0
1 0 0
0 0 1
Deine Variante: X-/Y-Achsen korrekt, aber beide invertiert
0 1 0
-1 0 0
0 0 1
Deine Variante mit - vor der 1: Maus hängt am oberen Rand fest
0 1 0
1 0 1
0 0 1
"Meine" Variante ohne - vor der 1: Maus hängt am unteren Rand fest
https://www.youtube.com/watch?v=WrntVIgRCbI
Ich weiß nicht, ob das komplett ohne Vorkenntnisse verständlich ist, aber er erklärt das finde ich sehr schön und vielleicht wird damit zumindest die "Mechanik" klar, mit der man Matrizen anwendet, um Punkte/Vektoren auf andere abzubilden. Auf diese Weise kannst du für eine Matrix von Hand ausrechnen, ob das Ergebnis herauskommt, das heraus kommen müsste. (Mir ist nicht ganz klar, warum man bei einem 2D Bildschirm 3 Koordinaten hat; einfach nur, damit es generisch ist und der unterste Wert ist immer 0/1?)
@__deets__
Da endet wohl dann mein übrig gebliebenes WIssen aus der Schule . Ich hätte gesagt, durch Multiplikation mit einer Abbildungsmatrix gar nicht, sondern durch Addition mit einem Verschiebungsvektor. Danke für den Hinweis.
Da endet wohl dann mein übrig gebliebenes WIssen aus der Schule . Ich hätte gesagt, durch Multiplikation mit einer Abbildungsmatrix gar nicht, sondern durch Addition mit einem Verschiebungsvektor. Danke für den Hinweis.
Ja Mann, das isses
Vielen Dank!!
Kalibrierung hab ich auch mal durchlaufen und ein paar Korrekturparameter bekommen (an die Ränder komme ich noch nicht).
shit, wenn das klappt, muss ich ja doch programmieren lernen
Ich werde mal noch versuchen, mir die Kombinationen aufzuschreiben, vielleicht steige ich ja doch noch dahinter, wie das funktioniert.
Gruß
Thorsten
Moin,
so eine idee hatte ich selbst auch schon . Es gibt aber auch schon sehr gute mobile Apps. ist es nicht einfacher sich ein tablet zu kaufen und dort dann zu spielen? Ansonsten würde ich mich dir gerne anschließen, da ich eine ähnliche idee habe und Python lernen möchte.
so eine idee hatte ich selbst auch schon . Es gibt aber auch schon sehr gute mobile Apps. ist es nicht einfacher sich ein tablet zu kaufen und dort dann zu spielen? Ansonsten würde ich mich dir gerne anschließen, da ich eine ähnliche idee habe und Python lernen möchte.
Dann stellt sich heraus, dass die änderung der beiden Parameter der Achse in diesem Fall unvermeidlich ist?thludwig hat geschrieben: ↑Mittwoch 15. Juli 2020, 14:02 Wie gesagt, ich hatte das so aus dem Netz übernommen und die Achsen waren zumindest so, dass bei hoch/runter bzw. links/rechts der Mauspfeil sich auch in der entsprechenden Achse bewegt hat.
Da ich nicht gecheckt habe, wie das mit der Matrix funktioniert, konnte ich weiter nichts tun.
Moinsen,
ich habe mir das gleiche Projekt ausgesucht. Ich schreibe das Programm mit kivy und ich habe es schon so weit geschafft, das es von 501 runter rechnen kann. ich möchte nun den Average berechnen lassen wie kriege ich das am besten programmiert?
Ich denke mal es ist am Besten die Versuche in einer Liste einzufügen und diese dann berechnen zu lassen mit sum[ ] und teilen durch len[ ].
Dies klappt auch mit einer Funktion aber wie kann man die Ergebnisse einer Funktion speichern lassen, denn ich kriege aktuell nur die einzelne Werte in die Liste unter und der vorherige Wert wird dann vergessen.
Gruß Jan
ich habe mir das gleiche Projekt ausgesucht. Ich schreibe das Programm mit kivy und ich habe es schon so weit geschafft, das es von 501 runter rechnen kann. ich möchte nun den Average berechnen lassen wie kriege ich das am besten programmiert?
Ich denke mal es ist am Besten die Versuche in einer Liste einzufügen und diese dann berechnen zu lassen mit sum[ ] und teilen durch len[ ].
Dies klappt auch mit einer Funktion aber wie kann man die Ergebnisse einer Funktion speichern lassen, denn ich kriege aktuell nur die einzelne Werte in die Liste unter und der vorherige Wert wird dann vergessen.
Gruß Jan
Hallo,
wie ist denn dein Programm aufgebaut? Kannst du nicht ein Dictonary erstellen, in der du für jeden Spieler das Ergebnis deiner Funktion abspeicherst und dann, je nach dem wann es gebraucht wird, rufst du es von dort wieder ab?
Grüße
Dennis
wie ist denn dein Programm aufgebaut? Kannst du nicht ein Dictonary erstellen, in der du für jeden Spieler das Ergebnis deiner Funktion abspeicherst und dann, je nach dem wann es gebraucht wird, rufst du es von dort wieder ab?
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Ich habe jetzt hin und her probiert und es klappt nun auch mit Average aber eigentlich möchte ich das so machen wie du es vorgeschlagen hast. Doch dies bekomme ich nicht hin.
def button_pressed(self, button):
if self.root.ids.outputLabel5.text == "0":
self.root.ids.outputLabel5.text = button.text
else:
self.root.ids.outputLabel5.text += button.text
def berechne2(self):
a = int(self.root.ids.outputLabel5.text)
b = int(self.root.ids.outputLabel1.text)
c = b-a
c = str(c)
d = str(a)
f = int(self.root.ids.outputLabel2.text)
g = f+a
h = str(g)
self.root.ids.outputLabel1.text = c
self.root.ids.outputLabel5.text = d
self.root.ids.outputLabel2.text = h
def reset(self):
self.root.ids.outputLabel5.text = "0"
def Anzahldarts(self):
Anzahl = int(self.root.ids.outputLabel3.text)
Anzahl1 = Anzahl + 3
Anzahl2 = str(Anzahl1)
self.root.ids.outputLabel3.text = Anzahl2
def Average(self):
Versuche = int(self.root.ids.outputLabel3.text)
Versuche1 = Versuche/3
Punkte = int(self.root.ids.outputLabel2.text)
Average = Punkte/Versuche1
Average1 = int(Average)
Average2 = str(Average1)
self.root.ids.outputLabel4.text = Average2
Ich hatte dann probiert es mit Listen zu machen aber ich weiß nicht wie ich das Ergebnis speicher wie du es meinst wie ich das machen müsste.
Ich hatte es so vor:
def Average(self):
Versuche = int(self.root.ids.outputLabel5.text)
Versuche1 = [ ]
Versuche1.append(Versuche)
Er fügt den Versuch in die Liste aber behält diesen nicht.
Die Anzeige ist aktuell
Name, Punkte Rest, Erzielte Punkte, Anzahl Versuche, Average, Eingabe.
Der Code ist schlecht geschrieben ich weiß... jeder Anfang ist schwer
def button_pressed(self, button):
if self.root.ids.outputLabel5.text == "0":
self.root.ids.outputLabel5.text = button.text
else:
self.root.ids.outputLabel5.text += button.text
def berechne2(self):
a = int(self.root.ids.outputLabel5.text)
b = int(self.root.ids.outputLabel1.text)
c = b-a
c = str(c)
d = str(a)
f = int(self.root.ids.outputLabel2.text)
g = f+a
h = str(g)
self.root.ids.outputLabel1.text = c
self.root.ids.outputLabel5.text = d
self.root.ids.outputLabel2.text = h
def reset(self):
self.root.ids.outputLabel5.text = "0"
def Anzahldarts(self):
Anzahl = int(self.root.ids.outputLabel3.text)
Anzahl1 = Anzahl + 3
Anzahl2 = str(Anzahl1)
self.root.ids.outputLabel3.text = Anzahl2
def Average(self):
Versuche = int(self.root.ids.outputLabel3.text)
Versuche1 = Versuche/3
Punkte = int(self.root.ids.outputLabel2.text)
Average = Punkte/Versuche1
Average1 = int(Average)
Average2 = str(Average1)
self.root.ids.outputLabel4.text = Average2
Ich hatte dann probiert es mit Listen zu machen aber ich weiß nicht wie ich das Ergebnis speicher wie du es meinst wie ich das machen müsste.
Ich hatte es so vor:
def Average(self):
Versuche = int(self.root.ids.outputLabel5.text)
Versuche1 = [ ]
Versuche1.append(Versuche)
Er fügt den Versuch in die Liste aber behält diesen nicht.
Die Anzeige ist aktuell
Name, Punkte Rest, Erzielte Punkte, Anzahl Versuche, Average, Eingabe.
Der Code ist schlecht geschrieben ich weiß... jeder Anfang ist schwer
Hallo,
tut mir leid, aber das ist mir zu undurchsichtig. So viele Buchstaben und Label's von denen man(ich) nicht versteht zu was sie da sind.
Schau mal unter 5.5 https://docs.python.org/3/tutorial/datastructures.html so etwas habe ich gemeint.
Beispiel:
Grüße
Dennis
tut mir leid, aber das ist mir zu undurchsichtig. So viele Buchstaben und Label's von denen man(ich) nicht versteht zu was sie da sind.
Schau mal unter 5.5 https://docs.python.org/3/tutorial/datastructures.html so etwas habe ich gemeint.
Beispiel:
Code: Alles auswählen
from random import randint
def calculate_average(score, throws):
if score > 0:
average = round(score / throws, 2)
else:
average = 0
return average
def simulate_game():
score = randint(0, 180)
throws = 3
return score, throws
def main():
averages =dict([('Hans', 0), ('Karle', 0), ('Horst', 0), ('Eugen', 0)])
for player in averages:
score, throws = simulate_game()
average = calculate_average(score, throws)
averages[player] = average
print(averages)
print(averages['Karle'])
if __name__ == '__main__':
main()
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@NewJoX: Die Namen sind teilweise sehr schlecht gewählt. Ein Name soll dem Leser vermitteln was der Wert dahinter bedeutet. Einbuchstabige Namen oder irgendwelche supergenerischen nummerierten Namen tun das so überhaupt nicht.
Du bindest auch deutlich zu viele belanglose Zwischenergebnisse an Namen. Nehmen wir mal `berechne2()`. Da wird `a` an den Inhalt von `outputLabel5` in eine Zahl gewandelt gebunden, dann `d` wieder an eine Zeichenkettendarstellung dieser Zahl, um die dann wieder in dem Label anzuzeigen. Da wird also die Zahl angezeigt die da sowieso schon angezeigt wurde. Warum? Wenn man das und die ganzen Zwischenergebnisse weglässt:
Selbst mit den bescheidenen Namen sieht man hier leichter was passiert. Und das man da theoretisch eine Methode herausziehen könnte die eine Zahl in einem Textlabel um einen Betrag verändert. Aaaber, das was da passiert ist nicht gut. Man verwendet eine GUI zur Ein- und Ausgabe von Werten, nicht um Zahlwerte in Textlabeln zu speichern. Das ist furchtbar umständlich und man hat so überhaupt gar keine Trennung zwischen GUI und Programmlogik.
Funktions- und Methodennamen beschreiben üblicherweise die Tätigkeit die sie durchführen. Auch damit sie einfacher von eher passiven Werten unterscheiden kann. `average` wäre ein guter Name für einen Durchschnitts*wert*, aber nicht für eine Methode die den berechnet.
Du bindest auch deutlich zu viele belanglose Zwischenergebnisse an Namen. Nehmen wir mal `berechne2()`. Da wird `a` an den Inhalt von `outputLabel5` in eine Zahl gewandelt gebunden, dann `d` wieder an eine Zeichenkettendarstellung dieser Zahl, um die dann wieder in dem Label anzuzeigen. Da wird also die Zahl angezeigt die da sowieso schon angezeigt wurde. Warum? Wenn man das und die ganzen Zwischenergebnisse weglässt:
Code: Alles auswählen
def berechne2(self):
a = int(self.root.ids.outputLabel5.text)
b = int(self.root.ids.outputLabel1.text)
c = b-a
c = str(c)
d = str(a)
f = int(self.root.ids.outputLabel2.text)
g = f+a
h = str(g)
self.root.ids.outputLabel1.text = c
self.root.ids.outputLabel5.text = d
self.root.ids.outputLabel2.text = h
# =>
def berechne2(self):
a = int(self.root.ids.outputLabel5.text)
self.root.ids.outputLabel1.text = str(
int(self.root.ids.outputLabel1.text) - a
)
self.root.ids.outputLabel2.text = str(
int(self.root.ids.outputLabel2.text) + a
)
Funktions- und Methodennamen beschreiben üblicherweise die Tätigkeit die sie durchführen. Auch damit sie einfacher von eher passiven Werten unterscheiden kann. `average` wäre ein guter Name für einen Durchschnitts*wert*, aber nicht für eine Methode die den berechnet.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Danke für die Kritik, mir ist bewusst das dort unnötige Schritte drin sind.
Ich weiß das es so ist kann es aber nicht beheben, da mir einfach noch das Wissen fehlt.
Ich hab meinen groben Fehler selber entdeckt das mit der Liste hat nicht geklappt da es nur local in der Funktion war und deswegen wurden die Daten nicht behalten. (Böser Anfängerfehler) Jetzt kann ich mir das mit den meisten Labels sparen und arbeite mit der Liste.
Zur meiner Person ich mache beruflich was anderes als programmieren und bin auch kein Informatikstudent oder sonstiges . Ich lerne das programmieren mit einer App und mir macht es viel Spaß dies zu lernen. Leider fehlt mir dadurch das ich beruflich was anderes mache, die Möglichkeit mich mit anderen auszutauschen deswegen benutze ich dieses Forum.
In den meisten Sachen muss ich mich einfach noch reinfuchsen doch vielleicht könntet ihr mir noch bei einem Problem helfen und zwar wie ich die Ergebnisse speichern kann. Dies wurde in der App nicht beschrieben und bei Google habe ich dazu nichts passendes gefunden. Ich müsste dazu ja irgendwie eine externe Datei kreieren um dort Ergebnisse abspeichern zu können, denn ich möchte die Ergebnisse natürlich behalten, wenn ich die App schließe.
Ich weiß das es so ist kann es aber nicht beheben, da mir einfach noch das Wissen fehlt.
Ich hab meinen groben Fehler selber entdeckt das mit der Liste hat nicht geklappt da es nur local in der Funktion war und deswegen wurden die Daten nicht behalten. (Böser Anfängerfehler) Jetzt kann ich mir das mit den meisten Labels sparen und arbeite mit der Liste.
Zur meiner Person ich mache beruflich was anderes als programmieren und bin auch kein Informatikstudent oder sonstiges . Ich lerne das programmieren mit einer App und mir macht es viel Spaß dies zu lernen. Leider fehlt mir dadurch das ich beruflich was anderes mache, die Möglichkeit mich mit anderen auszutauschen deswegen benutze ich dieses Forum.
In den meisten Sachen muss ich mich einfach noch reinfuchsen doch vielleicht könntet ihr mir noch bei einem Problem helfen und zwar wie ich die Ergebnisse speichern kann. Dies wurde in der App nicht beschrieben und bei Google habe ich dazu nichts passendes gefunden. Ich müsste dazu ja irgendwie eine externe Datei kreieren um dort Ergebnisse abspeichern zu können, denn ich möchte die Ergebnisse natürlich behalten, wenn ich die App schließe.
Hallo,
wie wäre es mit einer *.csv-Datei?
https://docs.python.org/3/library/csv.html
Grüße
Dennis
wie wäre es mit einer *.csv-Datei?
https://docs.python.org/3/library/csv.html
Dito, "einfach" am Ball bleiben. Ich hatte auch schon einige "Nervenzusammenbrüche"
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Falls 2D-Daten/eine Tabelle nicht ausreicht zur Strukturierung kommt oft auch das JSON-Format in Betracht, mit dem `json`-Modul aus der Standardbibliothek.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Moinsen,
leider benötige ich nochmal eure Hilfe , denn ich komm nicht weiter. Da ich mehrere Screens benötige habe ich nun mit Screenmanager mehrere Screens erschaffen doch das Problem ist nun das ich auf den einzelnen Screens einfach keinen Zugriff mehr auf die Id´s finde.
Ich habe dafür ein Testprogramm erschaffen um dort herumzuprobieren ob ich Zugriff finde, doch es klappt nicht.
class ScreenOne(Screen):
pass
class ScreenTwo(Screen):
pass
class ScreenThree(Screen):
pass
class ScreenFour(Screen):
pass
class ScreenFive(Screen):
pass
screen_manager = ScreenManager()
screen_manager.add_widget(ScreenOne(name="screen_one"))
screen_manager.add_widget(ScreenTwo(name="screen_two"))
screen_manager.add_widget(ScreenThree(name="screen_three"))
screen_manager.add_widget(ScreenFour(name="screen_four"))
screen_manager.add_widget(ScreenFive(name="screen_five"))
class ScreenApp(App):
def build(self):
return screen_manager
def reset(self):
self.root.OutputLabel.text = "1"
def Definition(a,b,c,d):
for x in [a,b,c,d]:
print(x)
<ScreenFive>:
BoxLayout:
Label:
id: OutputLabel
text: "500"
Button:
text: "Go to Screen 1"
background_color : 1, 0, 0, 1
on_press:
root.manager.transition.direction = 'right'
root.manager.current = 'screen_one'
TextInput:
id: my_textinput
Button:
text: "Test"
on_release: app.Definition(self,root,app)
<__main__.ScreenApp object at 0x00000203752C6908>
<kivy.uix.button.Button object at 0x00000203752C66D8>
<Screen name='screen_five'>
<__main__.ScreenApp object at 0x00000203752C6908>
das wäre die Ausgabe für app.Definition. Das Problem liegt wohl das root (Screen name='screen_five') zurück gibt was vorher nicht der Fall war.
leider benötige ich nochmal eure Hilfe , denn ich komm nicht weiter. Da ich mehrere Screens benötige habe ich nun mit Screenmanager mehrere Screens erschaffen doch das Problem ist nun das ich auf den einzelnen Screens einfach keinen Zugriff mehr auf die Id´s finde.
Ich habe dafür ein Testprogramm erschaffen um dort herumzuprobieren ob ich Zugriff finde, doch es klappt nicht.
class ScreenOne(Screen):
pass
class ScreenTwo(Screen):
pass
class ScreenThree(Screen):
pass
class ScreenFour(Screen):
pass
class ScreenFive(Screen):
pass
screen_manager = ScreenManager()
screen_manager.add_widget(ScreenOne(name="screen_one"))
screen_manager.add_widget(ScreenTwo(name="screen_two"))
screen_manager.add_widget(ScreenThree(name="screen_three"))
screen_manager.add_widget(ScreenFour(name="screen_four"))
screen_manager.add_widget(ScreenFive(name="screen_five"))
class ScreenApp(App):
def build(self):
return screen_manager
def reset(self):
self.root.OutputLabel.text = "1"
def Definition(a,b,c,d):
for x in [a,b,c,d]:
print(x)
<ScreenFive>:
BoxLayout:
Label:
id: OutputLabel
text: "500"
Button:
text: "Go to Screen 1"
background_color : 1, 0, 0, 1
on_press:
root.manager.transition.direction = 'right'
root.manager.current = 'screen_one'
TextInput:
id: my_textinput
Button:
text: "Test"
on_release: app.Definition(self,root,app)
<__main__.ScreenApp object at 0x00000203752C6908>
<kivy.uix.button.Button object at 0x00000203752C66D8>
<Screen name='screen_five'>
<__main__.ScreenApp object at 0x00000203752C6908>
das wäre die Ausgabe für app.Definition. Das Problem liegt wohl das root (Screen name='screen_five') zurück gibt was vorher nicht der Fall war.