Eine bessere Möglichkeit, Spalten einer Matrix unabhängig voneinander zu drehen

Seancarmody

Als Teil meiner Lernreise implementierte ich eine Technik zur Berechnung der Fläche eines Polygons, auf die ich in Futility Closet gestoßen bin . Ich habe eine Lösung gefunden, die aber ziemlich unelegant ist. Deshalb interessiere ich mich für bessere Methoden:

   polyarea =: -:@((+/@((1&{&|:)*(0{&|:1&|.)))-(+/@((0&{&|:)*(1{&|:1&|.))))
   y =: 2 7 9 5 6,.5 7 1 0 4
   polyarea y
20

Diese Technik dreht eine Spalte und nimmt das Punktprodukt der Spalten und macht dasselbe nach dem Drehen der anderen Spalte. Die Fläche ist die Hälfte der Differenz dieser beiden Ergebnisse.

Interessiert an Vorschlägen!

Bob

Ich denke, dass ihre Technik darauf hinausläuft, die Determinante zu verwenden, um den Bereich des Polygons http://mathworld.wolfram.com/PolygonArea.html zu finden

Aber mit der Futility Closet-Technik würde ich zuerst das Polygon schließen, indem ich den ersten Punkt am Ende hinzufüge.

   y =: 2 7 9 5 6,.5 7 1 0 4
   close=: (, {.)  

close ist ein Haken, der das erste Paar nimmt und es an das Ende anfügt

Nehmen Sie dann die Determinanten zwei Punkte gleichzeitig, was im Wesentlichen das ist, was sie mit ihren Spalten und Rotationen tun

   dets=: 2 (-/ . *)\ close  

dets nimmt die Determinante jedes Punktepaars - das Ergebnis ist negativ, wenn die Punkte im Uhrzeigersinn sind

Nehmen Sie dann diese Werte und verarbeiten Sie sie für die Antwort.

   clean=: |@:-:@:(+/)   

clean fasst die Determinanten zusammen, dividiert durch 2 und gibt den absoluten Wert des Ergebnisses zurück.

   clean @: dets y
20

Um das Ergebnis in vollständig stillschweigender Form zu sehen, können wir uns auf das f.Adverb (Fix) stützen , um unsere Definitionen zu reduzieren.

   clean @: dets f.
|@:-:@:(+/)@:(2 -/ .*\ (, {.))

Es ist nur eine andere Sichtweise auf das, was sie tun, aber es ermöglicht J, die .Konjunktion (Dot Product) und das \Adverb (Infix) zu verwenden, um all diese Rotationen mit Determinanten zu behandeln.

Hoffe das hilft.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

TOP Liste

heißlabel

Archiv