中性子ビームの単純なモンテカルロシミュレーションを書いています。ジオメトリロジックに問題がある(何かがある環境にあるかどうか)。私の問題は、Rubyは条件を順番に処理して、最初の価値を維持しているようです。ルビーの結合論理の問題
以下のコードは非常にうまくこのことを示しています
def checkPosition(*args)
polyCylRad = 2.5
polyCylFr = 15
polyCylB = -2.0
borPolyBoxL = 9.0/2
pbCylRad = 3.0
pbBoxL = 10.0/2
cdBoxL = 9.5/2
position = Array.new
material = String.new
args.each do |item|
position << item.inspect.to_f
end
xSquared = position.at(0) ** 2
ySquared = position.at(1) ** 2
zSquared = position.at(2) ** 2
modX = Math.sqrt(xSquared)
modY = Math.sqrt(ySquared)
modZ = Math.sqrt(zSquared)
puts xSquared
puts Math.sqrt(ySquared + zSquared) <= polyCylRad
puts (position.at(0) >= polyCylB)
puts (position.at(0) <= polyCylFr)
puts (position.at(0) >= polyCylB)and(position.at(0) <= polyCylFr)
puts (position.at(0) <= polyCylFr)and(position.at(0) >= polyCylB)
puts zSquared
polyCylinder = (Math.sqrt(ySquared + zSquared) <= polyCylRad)and((position.at(0) >= polyCylB)and(position.at(0) <= polyCylFr))
puts polyCylinder
borPolyBox = ((modX <= borPolyBoxL)or(modY < borPolyBoxL)or(modZ <= borPolyBoxL)) and not((modX >= cdBoxL)or(modY >= cdBoxL)or(modZ >= cdBoxL)) and not(Math.sqrt(ySquared + zSquared) <= polyCylRad)
puts borPolyBox
cadmiumShield = ((modX <= cdBoxL)or(modY < cdBoxL)or(modZ <= cdBoxL)) and not((modX >= pbBoxL)or(modY >= pbBoxL)or(modZ >= pbBoxL)) and not(Math.sqrt(ySquared + zSquared) <= polyCylRad)
puts cadmiumShield
leadShield = (((modX <= pbBoxL)or(modY <= pbBoxL)or(modZ <= pbBoxL)) or ((position.at(0) <= ployCylFr)and(Math.sqrt(ySquared + zSquared) <= pbCylRad))) and not(Math.sqrt(ySquared + zSquared) <= polyCylRad)
puts leadShield
if (polyCylinder) : material = "poly"
elsif(borPolyBox) : material = "borPoly"
elsif(cadmiumSheild) : material = "cd"
elsif(leadSheild) : material = "pb"
elsif(material == nil) : position = Array.new
end
thisEnvironment = Array.new
thisEnvironment << position << material
puts thisEnvironment.at(0)
puts thisEnvironment.at(1)
end
checkPosition(40, 0, 0)
その後、(私は怠け者だと将来的にはより多くの引数を追加したい場合があります)あなたが好きなコードを呼び出すが、それを引数として*引数を与えることを3つの浮動小数点数を使って呼び出すと、ジオメトリがロジックに設定されます。
私の質問は:どのようにそれは(つまり、ロジックを正しく評価する)のように動作するようになるかどうかは、 (私はしかし、読んで悪夢であり、メモリが安価で、リメイクしようとしています何である。)
あなたが指定できますあなたがそれをどのようにして論理を評価したいのかについてもっと具体的に?コード出力はどうすればよいですか? – wdebeaum
さて、私が見たいと思っているのは、さまざまなドメインに与えられた真理値です。これは引数の配列に依存します。 私の問題はputs文の最初の束で概説されています。評価された論理の順序は、&&、|| orとandと*、これはなぜですか? 私はこれとは思っていませんが、私はjEditインタプリタを使用しています(これは私のPATHだけに見えます)。 – morb