Neulich hatte ich die Möglichkeit, mit Koordinaten und Winkeln in Ruby umzugehen, und machte alle erforderlichen Kenntnisse, um sie kompakt zu handhaben, und fasste sie sorgfältig zusammen. In der zweiten Hälfte gibt es beispielsweise einen einfachen Code, mit dem Sie Einheiten in 8 Richtungen einchecken können, z. B. "Welche Richtung ist Herr B aus der Sicht von Herrn A?". Ich bin froh, wenn Sie es als Referenz verwenden können. (Version: Ruby 2.5.1)
Ebenso wie es unterschiedliche Standards zum Ausdrücken von Längen gibt, wie z. B. "Meter" und "Fuß", gibt es mehrere Möglichkeiten, Winkel auszudrücken. Wenn wir einen Winkel ausdrücken, verwenden wir im Allgemeinen etwa 90 ° (90 Grad). Auf dem von __Ruby bereitgestellten Modul wird jedoch eine Einheit namens radian (rad) __ verwendet.
In dieser Einheit beträgt __1 Runde 360 ° __. Wenn Sie beispielsweise "um 360 ° nach rechts (oder links) drehen", können Sie in genau dieselbe Richtung wie das Original zurückkehren.
In dieser Einheit beträgt 1 Runde 2 × π rad. Wenn Sie beispielsweise "2 x π rad nach rechts (oder links) drehen", können Sie in genau dieselbe Richtung wie das Original zurückkehren. (Π = Umfangsverhältnis ≒ 3,14)
Wie lang ist π für diejenigen, die als Student wie ich ihr Gedächtnis verloren haben, relativ zum Durchmesser des Kreises? Es ist das Verhältnis von und das Verhältnis ist auf das 3,14-fache festgelegt. Wenn der Durchmesser des Kreises 1 cm beträgt, beträgt der Umfang des Kreises 1 x π cm oder etwa 3,14 cm. Klicken Sie hier für Details zu π (Umfangsverhältnis)
Sie können Grad (°) wie folgt in Bogenmaß (rad) umrechnen.
0° = 0 × π = 0.00000… rad __45 ° __ = (2 × π) ÷ 8 = 0.78539… rad (45 ° ist in 8 gleiche Teile von „2 × π“ unterteilt) __90 ° __ = (2 × π) ÷ 4 = 1.57079… rad (90 ° ist in 4 gleiche Teile von „2 × π“ unterteilt) __180 ° __ = (2 × π) ÷ 2 = 3.14159… rad (180 ° ist in zwei gleiche Teile von „2 × π“ unterteilt) __270 ° __ = (2 × π) ÷ 4 × 3 = __4.71238 __… rad (270 ° ist 3/4 von „2 × π“) __360 ° __ = (2 × π) = 6.28318… rad (360 ° ist „2 × π“)
Es ist eine kleine Erklärung für den Kreisverkehr, aber es ist einfacher, sich daran zu erinnern, wenn Sie den Standard __180 (°) = π (rad) __ beibehalten.
Lassen Sie uns hier ein wesentliches Wissen über Ruby unterdrücken. Um π (≈3.14) im Code auszudrücken, benötigen wir die Hilfe eines Moduls namens "Math".
Um das Modul aufzurufen, schreiben Sie "include Math" oben in den Code. Wenn Sie das Modul aufrufen, können Sie π einfach durch Schreiben von PI
ausdrücken.
include Math
puts PI
#Ausgabeergebnis :: 3.141592653589793
Wenn Sie ein Modul in einer einzigen Aufnahme anstelle der gesamten Datei aufrufen möchten, verwenden Sie die folgende Methode (einschließlich der nicht benötigten mathematischen Version).
puts Math::PI
#Ausgabeergebnis :: 3.141592653589793
Referenz ... Der folgende Link führt auch die Methode der gegenseitigen Umrechnung zwischen Grad (°) und Bogenmaß (rad) ein. "Ruby-Code zum Konvertieren zwischen Radian und Grad" von @niwasawa
Wenn die x-Achse und die y-Achse wie oben beschrieben vorbereitet sind und die Koordinaten (Werte von x und y) angegeben sind, verwenden Sie eine andere Funktion "atan2", die vom oben genannten Mathematikmodul bereitgestellt wird. Sie können den Winkel (rad) finden.
include Math
def radian(x, y)
return atan2(y, x)
#Beachten Sie, dass die Reihenfolge der Argumente x und y umgekehrt ist
end
puts radian(5, 3)
#Ausgabeergebnis:: 0.5404195002705842
Dies ist ein Ausgabeergebnis eines Bogenmaßes (rad), das nicht sehr bekannt ist. Fügen Sie daher im Folgenden "÷ π × 180" in die Methode ein, um es in Grad (°) umzuwandeln, und runden Sie es schließlich ab.
include Math
def degree(x, y)
return atan2(y, x)/PI*180
end
puts degree(5, 3).round
#Ausgabeergebnis:: 31
Ich konnte den Winkel von 31 Grad sicher finden.
Wenn Sie die Koordinaten von Herrn A und die Koordinaten von Herrn B wie in der obigen Abbildung gezeigt erhalten, erstellen wir einen Code, damit Sie in 8 Richtungen antworten können, in welche Richtung Sie sich befinden. Übrigens möchte ich den Abstand zwischen den beiden messen. (Entfernungseinheit: m)
Geben Sie die Koordinaten von Herrn A (x, y) und die Koordinaten von Herrn B (x, y) ein. ↓ Gibt die Richtung und Entfernung von Herrn A zu Herrn B aus
Eingang
A's Koordinaten(x, y)Bitte geben Sie zwei Zahlen mit halber Breite und einem Abstand von halber Breite ein.
Die Koordinaten von Herrn A sind?◯ ◯ ← Hier eingeben
B's Koordinaten(x, y)Bitte geben Sie zwei Zahlen mit halber Breite und einem Abstand von halber Breite ein.
Die Koordinaten von B sind?◯ ◯ ← Hier eingeben
Ausgabe
Herr B ist von Herr A aus in Richtung ◆◆ und ▲▲ m entfernt.
Ausnahmebehandlung
Die beiden sind am selben Ort.
Wie in der Abbildung unten gezeigt, betrachten Sie Herrn A als Ausgangspunkt (Mitte), um herauszufinden, in welche Richtung Sie sich "von Herrn A aus gesehen" befinden. In diesem Fall ist es in Ordnung, Herrn A um -3 m in x-Richtung und + 2 m in y-Richtung zu bewegen, um Herrn A in die Mitte zu bringen. Bitten Sie daher Herrn B, sich ebenfalls um dieselbe Strecke zu bewegen.
A (3, -2) x ist -3, y ist +2 → A (0, 0) = Dies ist das Zentrum!
Ebenso ...
B (-2, -4) x ist -3, y ist +2 → __B (-5, -2) Es ist in Ordnung, wenn Sie die Richtung dieser Koordinate mit Math :: atan2
überprüfen! __ __
Math :: atan2
Dieses Mal werden wir alle Richtungen untersuchen. Ich habe erwartet, dass der Wert zwischen 0 ° und 360 ° unter Verwendung von "atan2" erhalten werden kann, aber tatsächlich ist der von __ "atan2" zurückgegebene Wertebereich -π bis π (in Bezug auf die Frequenz) 180 ° ~ 180 °) wird entschieden __. Bei "zwischen 3:00 und 9:00" in den Zeigern der Uhr kommt ein negativer Wert zurück ...
Es gibt kein Problem, selbst wenn der Algorithmus gemäß dieser Spezifikation erstellt wurde, aber zum Studieren möchte ich eine Methode verwenden, um den erhaltenen Winkelwert hier in einen geeigneten Wert umzuwandeln __. Referenz: "Konvertieren eines Winkels in einen positiven Winkel (0 bis 359 Grad) mit Ruby" von @ massassiez
# -So konvertieren Sie einen Wert zwischen 180 und 180 in einen Wert zwischen 0 und 360(-Am Beispiel 120)
(-120).modulo(360)
#Oder
-120 % 360
#Dadurch wird es in 240 konvertiert
Sowohl "%" als auch "Modulo" oben machen genau das Gleiche. Wenn der Rest (zu viel) durch 360 geteilt wird, wird er automatisch in den Bereich von 0 bis 360 konvertiert. (Modulo kann übrigens ohne Include Math verwendet werden)
Verwenden Sie Drei-Quadrate-Theorem, um den Abstand zwischen zwei Punkten A (x, y) und B (x, y) zu ermitteln. Machen wir das.
AB= \sqrt{(x_b−x_a)^2+(y_b−y_a)^2}
Wenn Sie dies in Ruby tun, sieht es folgendermaßen aus.
def distance(a_x, a_y, b_x, b_y)
return ((b_x - a_x)**2 + (b_y - a_y)**2)**(1/2.0)
end
# **2 ← im Quadrat
# **(1/2.0)← Route(Quadratwurzel)tun
sampl.rb(Komplett)
#Dieses Mal möchte ich atan2 und PI verwenden, also deklarieren Sie zuerst Math einschließen
include Math
#Methode, um den Winkel zu finden
def degree(x, y)
(atan2(y, x)/PI*180)%360
end
#Methode, um die Richtung zu finden
def compass(degree)
if degree > 15 && degree < 75
"Nordost"
elsif degree >= 75 && degree <= 105
"Norden"
elsif degree > 105 && degree < 165
"Nordwest"
elsif degree >= 165 && degree <= 195
"Westen"
elsif degree > 195 && degree < 255
"Südwesten"
elsif degree >= 255 && degree <= 285
"Süden"
elsif degree > 285 && degree < 345
"Süd-Ost"
else
"Osten"
end
end
#Methode zum Ermitteln des Abstands zwischen zwei Punkten
def distance(a_x, a_y, b_x, b_y)
((b_x - a_x)**2 + (b_y - a_y)**2)**(1/2.0)
end
puts "A's Koordinaten(x, y)Bitte geben Sie zwei Zahlen mit halber Breite und einem Abstand von halber Breite ein."
print "Die Koordinaten von Herrn A sind? "
a_x, a_y = gets.split.map(&:to_i)
puts "Die Koordinaten von Herrn B.(x, y)Bitte geben Sie zwei Zahlen mit halber Breite und einem Abstand von halber Breite ein."
print "Die Koordinaten von Herrn B. sind? "
b_x, b_y = gets.split.map(&:to_i)
if a_x == b_x && a_y == b_y
puts "Die beiden sind am selben Ort."
exit
end
direction = compass(degree(b_x - a_x, b_y - a_y))
distance = distance(a_x, a_y, b_x, b_y).round(1)
puts "Herr B sieht von Herrn A.#{direction}In der Richtung von#{distance}Ich bin weg."
#Innerhalb von 2 Metern ist dicht
distance > 2 ? (puts "Die soziale Distanz bleibt erhalten.") : (puts "Es ist dicht!")
Herr A.(3,-2)B.(-2,-4)Im Falle von
A's Koordinaten(x, y)Bitte geben Sie zwei Zahlen mit halber Breite und einem Abstand von halber Breite ein.
Die Koordinaten von Herrn A sind? 3 -2
Die Koordinaten von Herrn B.(x, y)Bitte geben Sie zwei Zahlen mit halber Breite und einem Abstand von halber Breite ein.
Die Koordinaten von Herrn B. sind? -2 -4
↓ Ergebnis ↓
Herr B ist in südwestlicher Richtung von Herrn A, 5.4m entfernt.
Die soziale Distanz bleibt erhalten.
Herr A.(-1,-7)B.(1,-7)Im Falle von
A's Koordinaten(x, y)Bitte geben Sie zwei Zahlen mit halber Breite und einem Abstand von halber Breite ein.
Die Koordinaten von Herrn A sind? -1 -7
Die Koordinaten von Herrn B.(x, y)Bitte geben Sie zwei Zahlen mit halber Breite und einem Abstand von halber Breite ein.
Die Koordinaten von Herrn B. sind? 1 -7
↓ Ergebnis ↓
Herr B ist in östlicher Richtung von Herrn A, 2.Es ist 0m entfernt.
Es ist dicht!
Herr A.(4,3)B.(4,3)Im Falle von
A's Koordinaten(x, y)Bitte geben Sie zwei Zahlen mit halber Breite und einem Abstand von halber Breite ein.
Die Koordinaten von Herrn A sind? 4 3
Die Koordinaten von Herrn B.(x, y)Bitte geben Sie zwei Zahlen mit halber Breite und einem Abstand von halber Breite ein.
Die Koordinaten von Herrn B. sind? 4 3
↓ Ergebnis ↓
Die beiden sind am selben Ort.
Wie oben erwähnt, "Erforderliche Mindestkenntnisse beim Umgang mit" Winkeln "und" Koordinaten "in Ruby + In welche Richtung ist Herr B aus der Sicht von Herrn A? Es war "Algorithmus". Danke für Ihren Besuch!
Recommended Posts