[過去ログ] くだすれPython(超初心者用) その46【Ruby禁止】 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
43
(5): デフォルトの名無しさん [] 2020/01/05(日) 00:25:24.67 ID:cNQ0xZ86(1/4) AAS
forの中のif 文がよく似てる感じなのですが
まとめれないでしょうか?
階層が深くて分かりにくくなってしまいました

*マークは字下げです

plane_angle = []
for i , h in enumerate(ho):
****if i >= len(ho) - 1:
********if ho[0].dot(ho[i])<-1:
************ang=0
********else:
************ang=acos(ho[0].dot(ho[i]))
************if ho[i].cross(ho[0]).z<0:
****************ang=pi+ang
************else:
****************ang=pi-ang
****else:
********if ho[i+1].dot(ho[i])<-1:
************ang = 0
********else:
************ang = acos(ho[i+1].dot(ho[i]))
************if ho[i].cross(ho[i+1]).z<0:
****************ang = pi + ang
************else:
****************ang = pi-ang
****plane_angle.append(ang)
44
(1): デフォルトの名無しさん [sage] 2020/01/05(日) 00:52:34.25 ID:NzdiaSgk(1/4) AAS
>>43
hoが何でどういう風にデータが入ってるのか教えてくれ
49: デフォルトの名無しさん [sage] 2020/01/05(日) 03:43:21.88 ID:y+bEWN5I(1) AAS
>>43
要は2つの隣接する単位ベクトルho[i]とho[i+1]の演算を行いたいが、iが末尾の時はi+1の代わりに0番目を使いたいということか?
それならまずi+1または0を変数jに入れて、ho[i]とho[j]の処理だけを書けば良さそう。
50
(1): デフォルトの名無しさん [sage] 2020/01/05(日) 04:26:51.43 ID:NzdiaSgk(2/4) AAS
>>43
def foo(v1, v2):
____if v1.cross(v2).z < 0:
________return pi + acos(v2.dot(v1))
____else:
________return pi - acos(v2.dot(v1))

plane_angle = [0 if v2.dot(v1) < -1 else foo(v1, v2) for v1, v2 in zip(ho, ho[1:] + ho[:1])]
51
(1): 43 [sage] 2020/01/05(日) 12:09:19.59 ID:cNQ0xZ86(3/4) AAS
>>50
びっくりするほど短くなるんですね
ありがとうございます
助かりました
56: 43 [sage] 2020/01/05(日) 15:49:37.35 ID:cNQ0xZ86(4/4) AAS
>>52
はい、命名規則つけるようにします。
ほとんど後でメンテナンス不可能になって投げ捨てる事になってしまうので
ちゃんとやることにします
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.038s