저는 벡터/매트릭스 라이브러리뿐만 아니라 처음부터 내 물리 엔진을 설계하려고합니다. 내 라이브러리에서 충돌 감지를 구현할 때까지 지금까지 모든 것이 훌륭하게 작동했습니다. 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은 (파이 게임에서 구현) 내 프로젝트 확인
흥미로운 알고리즘으로 이전에는 들어 보지 못했지만 매우 유용하게 보입니다! [this] (http://www.dyn4j.org/2010/04/gjk-distance-closest-points/) 링크를 살펴 보셨습니까? python이 아니더라도 먼 거리의 코드에서 알고리즘을 구현 한 것처럼 보입니다. – CodeSurgeon