Berechnung Punkte

  • Sonstige

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Link.

    Berechnung Punkte

    Hallo



    Ich habe es bereits geschafft, dass eine Linie dem Cursor folgt und das Objekte sich zu einem Punkt X hin bewegen

    Spoiler anzeigen

    Quellcode

    1. dx := figur_x - gegner1_x; // x-Differenz
    2. dy := figur_y - gegner1_y; // y-Differenz
    3. r := sqrt(dx*dx + dy*dy); // Abstand
    4. dx := dx * gegner1_v / r; // dx strecken mit dem Faktor v/r
    5. dy := dy * gegner1_v / r; // dy strecken mit dem Faktor v/r
    6. gegner1_x := gegner1_x + dx; // Gegner bewegt sich zum Spieler (x-Achse)
    7. gegner1_y := gegner1_y + dy; // Gegner bewegt sich zum Spieler (y-Achse)


    Ich würde gerne , dass die beiden Gelb markierten Punkte dargestellt werden und weiss nicht, wie ich sie berechnen kann :) [Sie wären am Rande des Kreises in einem 90° Winkel zur Cursor Linie , wenn der Cursor sich bewegt sollen sich auch die Punkte an der Kugel drehen...]

    Vielen Dank im Vorraus

    MFG Thorstian

    Verschoben. ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Hallo Thorstian,

    Ich gehe mal davon aus, dass diese Kreise den blauen Startpunkt berühren sollen. Es ist eigentlich ganz einfach: Du hast über die Delta X und Y einen Vektor gegeben, zu dem du nun eine rechtwinklige Gerade haben willst. Dafür musst du nur X mit Y tauschen und eine der Komponenten negativ nehmen sowie die Länge anpassen, die zwischen blauem Startpunkt und dem gelben Punkt(je Mittelpunkt) sein soll. Sagen wir, du hast jetzt die neue Y-Komponente von der negativen alten X-Komponente erhalten, so zeichnest du gerade den Punkt rechts. Den Vektor noch umkehren(bzw. Komponenten mal -1) und du hast den anderen gelben Punkt.
    Hoffe, ich habe dich richtig verstanden.

    Grüsse,

    Higlav
    Zugegeben habe ich nicht so viel Verstanden wir hatten Vektoren Berechnung noch nicht :3 könntest du es noch etwas einfacher / mit Beispiel / Anschaulicher erklären? sry...

    @Higlav

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thorstian“ ()

    Nunja, es sind einfach Dinge aus der linearen Algebra: Simple Vektorrechnung und simple Matrizenrechnung. Es gibt hier das Verlängern und Umkehren von Vektoren, sowie das Drehen um -90° anhand einer Matrixmultiplikation - das Ganze im R2.
    Hast du den Rechenvorgang verstanden, oder soll ich dir noch für die X- sowie die Y-Komponente eine Formel aufschreiben?
    Na dann, give it a try:

    LaTeX

    TeX-Quellcode

    1. \begin{align*}
    2. x'&=\frac{\mathrm{dy}}{\sqrt{\mathrm{dx}^2+\mathrm{dy}^2}}(20+r_g)\\
    3. x'&=\frac{-\mathrm{dx}}{\sqrt{\mathrm{dx}^2+\mathrm{dy}^2}}(20+r_g)
    4. \end{align*}

    dx und dy sind die Variablen bei dir im Script, 20 der Radius des blauen Punktes(aus'm Code) und rg der Radius des gelben Kreises. x' und y' referieren nun auf den Mittelpunkt des rechten gelben Punktes vom Mittelpunkt des blauen aus. Für den Linken einfach die beiden Variablen mal -1 rechnen.

    Gute Nacht ;)

    Thorstian schrieb:

    90° Winkel
    Du denkst ein-Dimensional, denke zwei-Dimensional.
    Nicht 90° sondern Senkrecht auf.
    Mach Dir zuerst eine ordentliche 2D-Vektor-Klasse, da finest Du Anhaltspunkte im Forum und bei Frau Google.
    Alles, was Du dann an Relation brauchst (Abstand, Abstand mit Nebenbedingung, Richtung, Richtungsänderung usw.) packst Du in diese Vektorklasse.
    Dann ordnest Du z.B. jedem Deiner Figuren 2 Punkte zu oder einen Punkt, einen Winkel (Kopf <-> Fuß => stehen, liegen) und (fast) feddich. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Mach Dir zuerst eine ordentliche 2D-Vektor-Klasse, da finest Du Anhaltspunkte im Forum und bei Frau Google.

    Bräuchte er gar nicht. Dank WindowsBase gibt es im System.Windows-Namespace schon alles was er braucht: Matrizen und Vektoren eingeschlossen.
    So weit ich weiss, gibts da ja auch noch andere .NET-Framework-Extensions(irgendwas mit Media3D?), die das gleiche und noch mehr(bis zu Quaternionen) bereitstellen.
    Habs jetzt so gelöst:

    Spoiler anzeigen

    Quellcode

    1. //mx,my Ist der Gelbe
    2. //px,py der Blaue Punkt
    3. x1:=mx-px;
    4. y1:=my-py;
    5. Vek1:=sqrt(x1*x1+y1*y1); //Vektorlänge
    6. x2:=y1/Vek1*40;
    7. y2:=x1/Vek1*40;
    8. FBackbuffer.Canvas.Rectangle(trunc(px+x2-5),trunc(py-y2-5),trunc(px+x2+5),trunc(py-y2+5));

    Higlav schrieb:

    alles was er braucht
    Jou.
    Er muss es nur nutzen.
    @Thorstian Nutze es.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi,

    ich raffe nicht mal, was der TE jetzt überhaupt machen will. Wenn sich die zwei gelben Kreise um den blauen Drehen sollen -ich kenne es nur aus Processing- würde ich ein pushMatrix und ein popMatrix machen und die location zum blauen Punkt translaten. Dort dann einfach nur noch ein rotate anwenden und das müsst's gewesen sein. Weiß ja nicht was du für Mittel zur Verfügung hast, aber ich denke mal matrix-stacks und das pushen von transformationen auf einen stack sollte doch irgendwie möglich sein mit deinem Lazarus-Dingsbums.

    Link :thumbup:
    Hello World