Pygameでポリゴンの回転を実行しようとしているので、いくつかの内積を実行してラジアンを取得し、それらのラジアンにacosを適用しています。このリンクによると、内積を-1から1の間に保つためにクランプ関数を使用する必要があります。ただし、次のエラーが発生します。
d_p = (clamp(self.dot_product(other), -1.0, 1.0))
NameError: global name 'clamp' is not defined
それらは同じ名前空間にあるように見えます-これはコードに表示されるのとまったく同じです。@staticmethod
私はclamp()を使ってみましたが、同じままです。動作する唯一のことは、それをインスタンスメソッドにすることです(署名clamp(self, x, a, b)
ですが、クランプが特定のインスタンスについて知る必要がない場合、これは悪い解決策のようです。これを修正する正しい方法は何ですか、そして私はどの概念が欠けていますか?
class v2:
#...
def clamp(x, a, b):
return min(max(x, a), b)
def radians_between(self, other):
d_p = (clamp(self.dot_product(other), -1.0, 1.0))
cos_of_angle = d_p/(self.get_magnitude()*other.get_magnitude())
return math.acos(cos_of_angle)