私は独自の物理エンジンをゼロから作成しようとしています。ベクトル/行列ライブラリも作成しています。 ライブラリで衝突検出を実装しようとするまで、これまでのところすべてがうまくいきました。最初にSATを使って、検出にはうまくいきましたが、オブジェクト間の距離も見つけたかったのです。次に、原点とポリゴンの距離を見つけることができるかどうかを確認するために、GJK距離アルゴリズムを実装しようとしました。しかし、それだけでは動作しません、私が実装されたアルゴリズムによって知覚の最小距離は、ポリゴンの頂点の一つであった:GJK距離アルゴリズムを実装できません
私は最初から他のライブラリを作ったけど、私は彼らが働いていると肯定的です。私はエラーがどこにあるかと思いますが、私こと、それらがコードスニペットです
def support(self,axis):
maxP = self.nodes[0]*axis #dot product of first vertex with the axis
n = self.nodes[0]
for node in self.nodes[1:]:
p = node*axis
if p>maxP:
maxP = p
n = node
return node
:
#objectL[0] is a hexagon
v = objectL[0].nodes[0]
W = []
u = 0
close_enough = False
while not close_enough and v != Vector(0,0):
w = objectL[0].support(-v)
d = v*w/abs(v) #*:dot product abs:magnitude
u = max(u,d)
close_enough = abs(v) - u <= 0.0001
if not close_enough:
W.append(w)
while len(W)>2:
del W[0]
v = Vector(0,0).vectorToLine(*W) #distance from the origin to the simplex
#formed by W
そして今、支援方法:とにかく、ここで私はGJKを実装したコードですそれを見つけることができません。私はhereからコピーしたGJKアルゴリズムです。ありがとう!
編集: Hereは(pygameの中に実装されている)私のプロジェクト
興味深いアルゴリズムですが、これまで聞いたことはありませんが、非常に便利です! [this](http://www.dyn4j.org/2010/04/gjk-distance-closest-points/)リンクを見ましたか? Pythonではないにもかかわらず、距離部分のコードでアルゴリズムを実装しているようです。 – CodeSurgeon