Sie brauchen nicht wirklich trigs für diese ein. Verwenden Sie einfach Steigungen oder wechseln Sie in x
und y
.
eine Linie der Steigung Gegeben m = y/x
, die Linie, die senkrecht zu dieser Linie hat Steigung -1/m
oder -x/y
. Die Steigung m zwischen den roten Punkten ist -150/150
oder -1/1
. Ich habe Ihre positiven y
Punkte nach unten bemerkt.
Daher ist die positive Steigung 1/1
. Die Werte für x und y ändern sich mit der gleichen Geschwindigkeit.
Sobald Sie das wissen, dann sollte es ziemlich einfach sein, den Rest herauszufinden. Da sie im 45-Grad-Winkel ausgerichtet sind, ist das Kantenverhältnis des 45-45-90
Dreiecks 1 : 1 : sqrt(2)
. Wenn also Ihre Länge 20
ist, wäre die individuelle x- und y-Änderung 20/sqrt(2)
oder ungefähr 14
in ganzen Zahlen.
Also, Ihre zwei gelben Punkte wäre bei (36, 236)
und (64, 264)
. Wenn die Linien nicht zu einem geeigneten Grad ausgerichtet sind, müssten Sie arctan()
oder etwas Ähnliches verwenden und den Winkel zwischen der Linie und der horizontalen Linie ermitteln, damit Sie das Verhältnis von x und y ändern können.
Ich hoffe, meine Antwort war nicht zu schwer zu folgen. Für eine allgemeinere Lösung siehe Troubadours Antwort.
Edit: Da die OP sagte der untere rote Punkt dreht tatsächlich um den oberen roten Punkt, müssen wir eine flexiblere Lösung statt.
Ich werde diese Antwort von Troubadour's erweitern, da ich genau dasselbe mache. Bitte beziehen Sie sich auf seinen Beitrag, wenn Sie meinen lesen.
1. den Vektor vom Ursprung Erhalten (200, 100) zu Punkt drehen (50, 250):
vector = (200 - 50, 100 - 250) = (150, -150)
2. Ihre Vektor Drehen durch die x- und y-Swapping und negieren x den neuen Vektor zu erhalten:
vector = (150, -150) => swap => (-150, 150) => negate x => (150, 150)
3. den Einheitsvektor Erhalten (der Länge 1) aus dem neuen Vektor:
vector = vector/length(vector)
= (150/length(vector), 150/length(vector))
~= (0.7071, 0.7071)
where
length(vector) = sqrt(150^2 + 150^2) ~= 212.2320
4. der Verschiebungsvektor der Länge 20, erhalten durch den Einheitsvektor multipliziert wird.
displacement_vector = vector * 20
= (0.7071 * 20, 0.7071 * 20)
= (14.1421, 14.1421)
5. Add/subtrahieren diesen Vektor zu/von Ihrem rotierenden Vektor (Punkt):
yellow_1 = (50, 250) + (14.1421, 14.1421) ~= (64, 254)
yellow_2 = (50, 250) - (14.1421, 14.1421) ~= (36, 236)
hoffe, dass ich die obigen Schritte Ihnen helfen, Ihren Code mit der Formulierung. Egal wie der Winkel ist, gleiche Schritte.
Stimmt es bei all Ihren Problemen, dass sie auf 45 Grad ausgerichtet sind? –
Entschuldigung, nicht sicher, was Sie fragen. Mathe ist wirklich nicht mein starker Anzug. Im obigen Diagramm fungiert das x: 200, y: 100 als Ankerpunkt. Wenn sich das Diagramm dreht, möchte ich die Formel kennen, um die Koordinaten der gelben Punkte zu erhalten, unabhängig davon, welchen Winkel die roten Punkte haben. Ich hoffe das ergibt Sinn. – TheDarkIn1978
Ah, also ist es nicht in diesem Winkel festgelegt. Okay, Zeit, diese rotierende Vektorlösung zu schreiben! –