前提
Pythonを独学で始めたのですが、プログラム作成中に行き詰ってしまいました。
どなたか解決方法をご教示願います。
Python3.9を使用しています。
実現したいこと
引数にある処理をして戻り値をだす6つの関数(関数A~F)があり、
同じ関数が2回連続しないようにしつつ、7回処理をしたいです。
【例】
×)関数A→B→C→A→A→B→A(4,5回目の処理で関数Aが連続している)
〇)関数A→B→C→D→E→F→A(同じ処理が連続していない)
この処理を、すべての組み合わせで行いたいのですが、
どのように書けばよいでしょうか?
【具体例】
具体的には、直方体の3次元空間内で、任意のtargetの座標点が
6つの壁(天井・床)で7回反射したときの鏡像の座標を求めたいです。
以下のソースコードのdef mirror1から6までが処理したい関数です。
該当のソースコード
Python
1#初期条件 2#部屋の寸法 3xwide = 20 4ywide = 15 5zwide = 5 6#任意の座標点 7target = np.array([2, 2, 2]) 8 9#原点をとおる壁でのy方向の反射 10xzmirror = np.array([[1, 0, 0], [0, -1, 0], [0, 0, 1]]) 11#原点をとおる壁でのz方向の反射 12xymirror = np.array([[1, 0, 0], [0, 1, 0], [0, 0, -1]]) 13#原点をとおる壁でのx方向の反射 14yzmirror = np.array([[-1, 0, 0], [0, 1, 0], [0, 0, 1]]) 15#法線ベクトルを準備 16xn = np.array([-1, 0, 0]) 17yn = np.array([0, -1, 0]) 18zn = np.array([0, 0, -1]) 19 20#反射の鏡映座標を求める関数 21def mirror1(a): 22 x0_mir1 = np.dot(a, yzmirror) 23 return x0_mir1 24 25def mirror2(a): 26 y0_mir1 = np.dot(a, xzmirror) 27 return y0_mir1 28 29def mirror3(a): 30 z0_mir1 = np.dot(a, xymirror) 31 return z0_mir1 32 33def mirror4(a): 34 x1_mir1 = a - (2 * (np.dot(a, xn) + xwide)) * xn 35 return x1_mir1 36 37def mirror5(a): 38 y1_mir1 = a - (2 * (np.dot(a, yn) + ywide)) * yn 39 return y1_mir1 40 41def mirror6(a): 42 z1_mir1 = a - (2 * (np.dot(a, zn) + zwide)) * zn 43 return z1_mir1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。