[Dreiecke] Herausfinden wenn Maus drüber/drinne ist
Übersicht

Bobo2040Betreff: [Dreiecke] Herausfinden wenn Maus drüber/drinne ist |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Huhu
Ich würde gerne mal wissen wie ich herausfinden kann ob mein Mauszeiger in einem Dreieck Ist oder nicht ? In einem Recht ist es ja easy einfach die Start/Ende Funktionen mit mousex mousey Vergleichen aber ein Dreieck ist ja nur mit drei punkten und ja wie kann ich es machen ? Das Dreieck ist mit 3 mal line gezeichnet ![]() Denke das man sowas iwie ausrechnen kann ums dann mit x /y der Maus zu vergleichen.... Aber ich bin leider KEIN mathe Genie ![]() MFG |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du nichts findest, suchst du nach den falschen Begriffen. Mit "Point in Triangle" sollte schon irgendwas brauchbares auftauchen.
Ich habe sogar mal einen Worklogeintrag dazu verfasst. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hsha ja wie soll so ein noob wie ich auf point in triangle kommen ? ![]() Habe mit Maus über Dreieck etc probiert.... Habe mir jetzt über legt das ich neun Rect nehme esnauf MouseX und Y lege das ne Größe von z.b. 2*2px hat Und dann mit rechts overlap mache aber zuerst gucje ich mir deinen Link mal an ![]() Und noch ne Frage kann ich die 3 Limes zu einer Art Object zsm fassen? Das es mit Rect overlap funktioniert... Mfg Ehm um ehrlich zu sein versteht ich die Funktionen zum Brechnennnicht wirklich... Geht das nicht Leuchter bzw verständlich ? Nicht das du jetzt ne neue Funktion machen sollst oder deine Funktion schlecht ist ![]() ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du ein Dreieck in neun Rechtecke aufteilen kannst und das für deine Zwecke genau genug ist... nur zu.
Ich würde immer mathematisch exakte Lösungen bevorzugen wo immer es möglich ist - denn die funktionieren für alle Fälle und erzeugen keine zusätzlichen Bugs. Eine Lösung innerhalb von 2 Minuten nicht verstehen zu können ist klar - woher soll das auch kommen? Du musst dich schon damit beschäftigen. Klar kannst du Linien oder Dreiecke als Objekte behandeln; Einfach einen Type mit den nötigen Koordinatenpaaren erstellen. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmm ne Rechtecke wollte ich eigentlich nicht ![]() Dann schau ich mir deine Funktion nochmal an und probiert sie zu verstehen ![]() Ich melde mich nochmal Danke erstmal für die schnelle Antwort ![]() Mfg |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du, Bobo, nimms mir nicht böse, aber bitte bemühe doch Google für zumindest 10-20 Minuten bevor du postest. Ein Großteil deiner Fragen lässt sich durch einen Blick in die Hilfe / eine Forensuche / ein mal ausgiebig googlen lösen. Aber scheinbar postest du eher hier rein als das du selbst suchst.
Auch fragst du oft lieber noch mal nach, wenn du eine Antwort bekommst, statt zu versuchen, die Antwort wirklich zu verstehen. Für einen blutigen Anfänger wäre das ok, aber du bist hier schon mehr als ein halbes Jahr. Das klingt eventuell komisch, vor allem für einen Schüler, gut googlen können ist eine sehr wichtige Fähigkeit für Programmierer. Es kann auch nach Jahrzehnten Programmerfahrung niemand erwarten, dass man alles in jeder Programmiersprache und jedem Framework kann, aber wissen, woher man diese Informationen her bekommt ist auf jeden Fall drin. Darum: Bevor du postest, schau dir die Hilfe, die Forensuche und Google für mindestens 15 Minuten an, und wenn du eine Lösung findest, die dir zu hoch ist, dann such nicht weiter sondern versuche die Lösung zu verstehen. Auch Lösungen in anderen Programmiersprachen kann man oft recht einfach umschreiben. Noch eins: Bobo2040 hat Folgendes geschrieben: Aber ich bin leider KEIN mathe Genie
![]() Das ist etwas, was du öfters tust: Du willst fertige Lösungen für Sachen, wo du noch einen weiten Weg hast, sie zu verstehen (siehe deine letzte Frage zu Netzwerk und Types). Tu dir selbst einen Gefallen und lern eines nach dem anderen, und nicht alles auf einmal. Edit: Noch ein zweites: Bitte verwende ab sofort Chrome oder einen anderen Browser mit eingebauter Rechtschreibkorrektur. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja fertige Lösung mochte uch nicht also manchmal klar wenns nach 100versuchen nicht klappt dann fehlt einem halt oft die Motivation ... Und ichhabe mir jetzt mal über legt ben variieren des Dreieck zu machen und dann mit imagerotate zu drehen halt abhängig vom Winkel...
Bin grad am tablet habe das auch aufm tablet so geschrieben konnte es deshalb auch nicht testen ![]() Und ich weiß das ich die gleiche Funktion für die rechte Hälfte des graphic Bereichs machen muss ![]() BlitzBasic: [AUSKLAPPEN]
Schreibfehler können drinne sein ![]() Ist das so möglich also kann das funktionieren ? Mfg |
||
Tritium |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Falls Dir Xeres Lösung nicht liegt gibt es auch die Möglichkeit, das vektoriell zu lösen. Dazu beschreibst Du jede Seite Deines Dreiecks so als Gerade (=Vektor), dass ein Vektor von A nach B, einer von B nach C und einer von C nach A zeigt*. Dann prüfst, ob der fragliche Punkt links von jedem der drei Vektoren liegt - das geht bspw. so: http://www.c-plusplus.de/forum/266934-full
Ist das der Fall, liegt der Punkt im Dreieck. Mach Dir einfach mal ne Skizze, zeichne die Sachen (Dreieck, A, B, C, drei Vektoren, zu prüfender Punkt) ein und überleg Dir anhand dessen, was passiert, wenn der Punkt mal im, und mal außerhalb des Dreiecks liegt. Ob Dein Code funktioniert weiß ich nicht, hab ich nicht ausprobiert. Die zwei If-Verzweigungen machen bestimmt nicht das, was Du möchtest, da "Gegenkathete*(-1)" ja keine Zuweisung enthält, Du also einen Wert berechnest, und diesen dann keiner Variable zuweist. Übrigens lassen sich die beiden Ifs auch so ausdrücken: BlitzBasic: [AUSKLAPPEN] Gegenkathete = Abs(Gegenkathete) Ist das Gleiche. *Da Du zuvor die Ecken Deines Dreieckes im math. Uhrzeigersinn mit A, B, C benannt hast. |
||
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine recht einfache und allgemeine Lösung für konvexe Polygone: http://de.wikipedia.org/wiki/P...ach_Jordan
MFG |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Einfachere Lösungen wären auch immer dann machbar, wenn die Dreiecke nicht beliebig sind, sondern immer ein vorgegebenes Aussehen haben, wie z.B. ein Spielfeld aus lauter gleichschenkligen Dreiecken....
Bobo.. Sind die Dreiecke schon irgenwie vorgegeben? Oder habe sie ein bestimmtes Aussehen? |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein sind nicht vorgegeben haben auch die gleiche Größe also ich kann mir aussuchen wie breit oder lang sie sind es sind z.b. 16 Felder von der Mitte ausgehend um den Spieler rum und jedes dieser Felder ist ein Dreieck ![]() ![]() Meine Idee war halt ohne die Dreiecke sondern anhand des Winkels soll das Schiff zur Maus gedreht werden so war jedenfalls meine Idee ![]() |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wofür brauchst du die Dreiecke überhaupt? | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja für die Felder ![]() Das das Schiff egal wie es sich dreht und wendet die selbe Anzahl von px pro sek zurücklegt wollte ich wenn mousehit True ist und es im Dreieck ist also die Maus dann soll das Schiff Bild geändert werden und die Geschwindigkeit also x=x+1 y=y-1 so in etwa damit es in die Richtung fliegt wo die Maus grad ist ![]() Mfg |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie wärs mit Sinus / Cosinus?
Winkel zwischen Schiff / Maus: Code: [AUSKLAPPEN] winkel = Atan2( MausY - SchiffY, MausX - SchiffX)
verschiebungX = Cos(winkel) verschiebungY = Sin(winkel) (mal so als pseudocode, funktionen sollten existieren unter BlitzBasic) Das dürfte das einfachste für dein beschriebenes problem sein ![]() |
||
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja ist ja im Prinzip das
Was ich mit meinemmcode probiert habe ![]() Nur traue mit an COS nicht so wirklich ran blicke das nicht ![]() Nur noch eine frge wie kann ich die Geschwindigkeit zur zu drückte legten Strecke konstant halten ? Weil wenn mein Schiff sich pro sek 50px bewegt sind das bei x+50 mehr als wenn ich diagonal fliege wenn ihr versteht was Ich meine ![]() Mfg |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ganz genau dafür ist das Cosinus/Sinus-Zeug da.
Und mit einer einfachen Forensuche nach "Cosinus Tutorial" findet sich eine ganze Seite von Suchresultaten, von denen in fast jedem erklärt wird, wie man sie verwendet. Bitte SUCHE ENDLICH MAL SELBST. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-.-' ich meine ich blicke es allgemein nicht habes in der schule nicht verstanden und da hbe
Ich mir tuts angeschaut... |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Selbst PhillipK hat in seinem Post dir alles erklärt, was du brauchst.
Wenn du deine Werte in seine Formeln einsetzt (brauchst nicht mal irgendwas dabei rechnen, nur einsetzen), dann hast du alles, was du brauchst. verschiebungX und verschiebungY sind dabei die Geschwindigkeit deines Schiffs entlang der X- bzw. Y-Achse, die jedes Frame der Position hinzugefügt wird: BlitzBasic: [AUSKLAPPEN] positionX = positionX + verschiebungX Wenn du das nicht verstehst, dann würde ich dir raten, programmier etwas, was du verstehst. Oder warte, bis du in der Schule genügend weit bist, um mit sowas mit zu kommen. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst im Grunde nicht so viel zu SIN() und COS() lernen, um das zu verwirklichen, was Du vorhast.
Die Bewegung hat eine Richtung. Aus jeder Richtung kann man einen COS() und einen SIN() berechnen. Wenn man diese Werte jetzt mit der Vorwärtsbewegung multipliziert, dann ergeben sich daraus die X- und Y-Werte, um die man das Schiff versetzen muss. (Hinweis: Auch hier ist es wieder so, dass es noch einfacher wird wenn es z.b. nur 8 Richtungen, also 45°-Schritte geben soll. siehe am Ende) Hier mal ein Beispiel für Bewegung in beliebige Richtung: BlitzBasic: [AUSKLAPPEN] SchiffX%=300 das war's schon. Nur 8 Richtungen: Soll z.b. nur senkrecht, waagrecht und diagonal erlaubt sein, dann kannst Du komplett auf SIN COS verzichten und bei "diagonal" einfach statt mit +50 immer 50*0.7 also +35 dazuaddieren. BlitzBasic: [AUSKLAPPEN] SchiffX%=300 Zur Steuerung würde ich zunächst zu TASTATUR raten, sonst hast Du es bei der Frage "Winkel aus Maus" gleich auch noch mit ATAN() zu tun. Das lernst Du schon auch noch,a ber nicht im selben Moment wo Du SIN und COS zum ersten Mal verwendest. Immer einen Schritt nach dem anderen! |
||
Bobo2040 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Okay danke ![]() Ich teste es aus bin grad am PC ![]() Nur ich will keine Funktion nehmen wenn ich nicht wirkliuch weiß was hinter steht also bei Cos Sin muss +sie zwar nehmen aber was der bauer nicht kennt frisst er nicht :DDD Nochmal ne frage habe iwie nen Problem mit meinem Server ich habe nen Type da sind die Variablen der User gespeichert iund die Communitcation zwischen Client und Server und Client zu Client klappt super ![]() Aber der Server soll bei einem Timeout den User nach 5 sek löschen ..er löscht auch aber alle anderen ausser den ersten wenn ich 2 CLienten anmache wird der 2. gelöscht nach 5 sek obwohl daten versendet werden und auch beim Server ankommen... BlitzBasic: [AUSKLAPPEN]
Mfg PS: Ich weiß das info\Client nen schlechter name ist hatte es ausm Tut gelernt und habe es auch schon auf Xeres sein Hinweis hin zu client.Client geändert jedoch sind die Files aufm Laptop ![]() Den hat meine Schwester also komme ich nicht dran ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group