v=: ((1 2);(3 4);(0 5);<(2 1))
d =: (1,0.5,1,0.25);(0.5,1,0.75,0.25);(1,0.75,1,0);(0.75,0.25,0,1)
force=:(v ((0{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(0{d)
force=:(v ((1{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(1{d)
force=:(v ((2{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(2{d)
force=:(v ((3{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(3{d)
force=:(v ((4{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(4{d)
force=:(v ((y{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(y{d)
Da v und d, gibt erste Kraftsäule uns (n + 1) -te Vektor von v.Definieren der Monad-Funktion?
2. Säule der Kraft uns jeden Vektor von v gibt.
3. Spalte Kraft gibt uns eine Konstante zwischen 2 Vektoren.
Das heißt, (1 2);(1 2)
wird 1 auf der dritten Spalte der Kraft haben, aber (1 2);(3 4)
möglicherweise nicht. Ich möchte eine Monade Funktion machen, die uns
force=:(v ((1{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(1{d)
gibt, wenn wir force_constant 1
oder force=:(v ((2{>"0 v);])@{~ ] i.4) ,"1 0 <"0>(2{d)
geben, wenn wir geben force_constant 2
Könnte jemand helfen?
Ich würde zweitens Dan Vorschlag Sie Code Review überprüfen. Um ein Beispiel zu geben, ist diese Version eine reine Vereinfachung des obigen Verbs, ohne stillschweigend zu untersuchen oder 'v' &' d' als Argumente zu liefern: 'force_constant =: monad def '((y {v),. V),. <"0 > y {d'' – Tikkanz
@Tikkanz Ich wäre versucht, weiter zu gehen und die Boxen abzuwerfen. Machen Sie es zu einem M x N x 2 Array von ganzen Zahlen. Fügen Sie eine Dummy-Spalte ('0's) zur Entfernungsebene hinzu, um sie regelmäßig zu machen. –