浮動小数点の精度が原因で、並列ベクトルを見つけるのに問題があります。ベクトルが許容範囲内で平行かどうかを判断するにはどうすればよいですか?
また、許容範囲との直交性のチェックも必要です。
浮動小数点の精度が原因で、並列ベクトルを見つけるのに問題があります。ベクトルが許容範囲内で平行かどうかを判断するにはどうすればよいですか?
また、許容範囲との直交性のチェックも必要です。
ベクトルの場合、それらが直交しているかどうかを次のようにチェックしv1
ますv2
abs(scalar_product(v1,v2)/(length(v1)*length(v2))) < epsilon
はepsilon
十分に小さいです。アナログ的に使用できます
scalar_product(v1,v2)/(length(v1)*length(v2)) > 1 - epsilon
並列性テスト用および
scalar_product(v1,v2)/(length(v1)*length(v2)) < -1 + epsilon
反平行のため。
3D ベクトルがある場合、答えは簡単です。外積を計算し、それがゼロに近い場合、ベクトルはほぼ平行です: http://mathworld.wolfram.com/ParallelVectors.html
2D ベクトルの場合、ゼロ (1;2) => (1;2;0)、(4; 5.6) => (4; 5.6; 0) などの座標を追加するだけで、それらを 3D ベクトルに変換できます。
内積がゼロの場合、2 つのベクトルは直交または直交します:
http://mathworld.wolfram.com/CrossProduct.html
3D ベクトルを使用している場合は、ツールベルトvgを使用してこれを簡潔に行うことができます。これは numpy の上にある軽量レイヤーであり、単一の値と積み重ねられたベクトルをサポートします。
import numpy as np
import vg
v1 = np.array([1.0, 2.0, 3.0])
v2 = np.array([-2.0, -4.0, -6.0])
vg.almost_collinear(v1, v2)
# True
私は最後のスタートアップでライブラリを作成しました。このライブラリは、NumPy で冗長または不透明な単純なアイデアを使用することによって動機付けられました。