Spiegeln, die einen Winkel horizontal
Ich will wissen, einen Weg, um flip-Winkel in einer horizontalen Achse, die zimmerreserviereung, ohne das zu tun, viele Operationen. Sagen, ich haben einen Winkel von 0 ("nach rechts" in meinem code Koordinatensystem), der gedrehte Winkel sollte 180 (zeigt nach Links). Wenn 90 (oben), umgedreht sollte es noch 90. 89 91, und so weiter.
Ich kann auf die X/Y-Geschwindigkeiten impliziert durch den Winkel, aber das würde die Dinge verlangsamen, und ich glaube, es ist auch nicht der richtige Weg zu gehen.
Ich weiß nicht viel Mathe, so dass ich sein könnte, ruft die Dinge durch den falschen Namen...Kann jemand helfen?
EDIT: Sorry, ich nahm lang, ich musste aus dem computer für lange, OK...
http://img215.imageshack.us/img215/8095/screenshot031v.jpg
Dieser screenshot machen könnte.Die oben genannten Struktur sind zwei Satelliten und einem Balken verbunden, um den weißen Punkt in der Mitte. Die zwei Satelliten sollten Erben der Winkel der weiße Punkt (es ist sichtbar für debug-Zwecke), wenn es also das Ziel in einem Winkel, Sie werden Folgen. Die Satelliten auf der linken Seite ist gespiegelt, ich rechnete also mit 180-Winkel, wie vorgeschlagen, obwohl es war mein Erster Versuch als gut. Wie Sie sehen können, es ist nicht gespiegelt, sondern Umgekehrt. Und wenn der weiße Punkt dreht sich, es dreht sich rückwärts. Die andere aber in Ordnung.
Dies ist der Winkel, Neuberechnung für etwas, verbunden, um etwas anderes, pid würden die Eltern, und die id der aktuellen. pin.ang ist der Winkel, offset kopiert, wenn das Objekt verknüpft ist, zu einem anderen, so dass es hält die position, wenn gedreht wird:
if(object[id].mirror)
object[id].angle = 180 - (object[id].pin.ang + object[pid].angle);
else
object[id].angle = object[id].pin.ang + object[pid].angle;
- Und dies ist die spezifische rotation Teil. OpenGL. die offx/y ist für Dinge gedreht, off-center, wie der Strahl über dort heraus zu kommen, es macht alles andere Recht.
glTranslatef(list[index[i]].x, list[index[i]].y, 0);
glRotatef(list[index[i]].angle, 0.0, 0.0, 1.0);
glTranslatef(list[index[i]].offx, -list[index[i]].offy, 0);
Die rotation scheint auch zu übersehen, wenn die Geschwindigkeit der rotation (eine Ganzzahl Hinzugefügt jede neu gezeichnet, um den aktuellen Winkel, positiv im Uhrzeigersinn drehen, wie in dieser nächsten:
http://img216.imageshack.us/img216/7/screenshot032ulr.jpg
Also ist es definitiv keine 180-Winkel, egal wie offensichtlich es wäre. Die spiegelung erfolgt, indem Sie einfach die Umkehrung der textur-Koordinaten, so dass es nicht beeinflussen Winkel. Ich fürchte, es könnte eine Macke auf der GL Drehung Sache.
Wollen Sie behandeln nach unten als 270 oder -90? Oder ist das nie passiert?
Gut, ich bin auch nicht sicher, was ich Tue, ich bin sorry für die schlechte Erklärung. Mein Ziel ist es, mit Kanonen auf ein Zeichen, und diejenigen, die Kanonen nach dem Zustand der Charakter, so Zielen Sie in die entgegengesetzte Richtung, basierend auf deren Winkel. Im Grunde vertauschen rechts und Links, so dass die Kanonen können Sie die mirror-flag. Wenn ich 180-Winkel beim drehen, werden Sie umgedreht, so eine Kanone nach unten-rechts wird das Ziel oben Links. Ich versuche, Sie unten-Links.
Wenn Sie 180+angle, wird es Ihnen genau die entgegengesetzte Richtung (zB: oben Links wird zu rechts unten). Wenn Sie 180-Winkel, dreht es von Links nach rechts (oder von rechts nach Links), ohne den up/down (zB: oben Links wird oben rechts).
Also, was ist es genau, dass Sie möchten, wollen Sie zu reflektieren, über die die Y-Achse? Da die Subtraktion der Winkel von 180 perfekt funktioniert, kann man nicht mehr klar auf die Winkel in deinem Beispiel, wo es nicht funktioniert. Für alles, was du sagst im ersten post, das subtrahieren von 180 Werken. Was könnte man tun, aber nur auf der x/y-Koordinaten ist, multiplizieren Sie die y-Koordinate um -1. Diese werden immer entsprechend Ihrer Koordinate über der y-Achse.
InformationsquelleAutor | 2009-09-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die reflektierte Menge (bei einem Blick auf die Mathematik) wäre
(180 - angle)
Hinweis: die negativen wenn Sie fallen unter die "horizontale Ebene", die man verlassen könnte, wie Sie sind, oder Sie behandeln wie ein Sonderfall.
Sie können normalisieren Winkel zu fallen, in die zum Beispiel die [0;360) Intervall durch addition oder Subtraktion eines vielfachen von 360 Grad.
In diesem Fall gibt es keine Möglichkeit, spiegeln das Objekt durch ändern der Winkel. Sie brauchen, um zu spiegeln, D. H. flip-jeder Punkt einzeln in die ojbect.
Ich glaube du verwechselst etwas. Wie tut das Modell Aussehen, das Sie drehen möchten? Wie soll er Aussehen nach dem flip?
Sind Sie in der Lage, poste ich einen screenshot? Es hängt davon ab, wie dein Bild aufgebaut ist. Aber ja, wie @Guffa, sagte, werden Sie wahrscheinlich benötigen, um das Bild kippen.
InformationsquelleAutor butterchicken
Ist es nicht einfach
Ergebnis = 180-(Ihren Winkel)
InformationsquelleAutor Martin
Wie bereits erläutert, finden Sie die gegenüberliegenden Winkel durch Subtraktion Ihre Winkel von 180 Grad. Eg:
Direkt mit der Manipulation der X/Y-Geschwindigkeiten wäre es nicht sehr umständlich. Sie einfach die Umkehrung der Richtung der X-Geschwindigkeit, durch Multiplikation mit minus 1, Beispiel:
speedx = (-1) * speedx
. Dies würde sich ändern, die Links-rechts-Richtung, zB: etwas in Bewegung auf der linken Seite würde anfangen sich zu bewegen, nach rechts, und Umgekehrt, und die vertikale Geschwindigkeit würde davon nicht betroffen sein.Wenn Sie mit Sinus - /Cosinus (sin/cos), um eine Neuberechnung Ihrer X/Y-Geschwindigkeit-Komponenten, dann die
*(-1)
Methode wäre wahrscheinlich effizienter. Letztendlich kommt es auf den Kontext des Programms. Wenn Sie auf der Suche nach einer besseren Lösung, aktualisieren Sie Ihre Frage mit mehr details.InformationsquelleAutor Samuel Jaeschke
Aah, scheint das problem kam aus negativen zahlen, schließlich habe ich dafür gesorgt, Ihnen positiv und nun ist die rotation nicht gut, ich muss noch nicht mal neu berechnen-Winkel...
Vielen Dank an alle, landete ich herauszufinden, wegen der bits von jeder Reaktion.
InformationsquelleAutor
zu Blättern und gegen den Uhrzeigersinn drehen, um im Uhrzeigersinn (270 rechts -> 90 auf der rechten Seite)
angle - 360
--
flip vertikal (180 oben -> 0/360 oben)
Math.Normalize(angle - 180)
--
beide:
float flipped_vertical = angle - 360
float flipped_vertical_and_horizontal = Math.Normalize(flipped_vertical- 180)
InformationsquelleAutor Wikkle_A
Diese Lösung ist für -Y orientierte Winkel (wie eine Uhr)! Für die +X-Orientierung (wie in der Schule Mathematik) müssen Sie vertauschen von X und Y.
InformationsquelleAutor vikingfabian
nur
360-angle
wird flip-Winkel horizontaly aber nicht verticalyEs spiegeln würde es mit Bezug auf die X-Achse (horizontale Achse). Ich denke, der Autor dieser Antwort verwirrt wegen der Formulierung.
InformationsquelleAutor user5450074