2010-06-30 3 views
1

일부 사용자는 중심점을 사용하여 2D에서 쿼드를 채우는 방법을 알고 있습니까? 현재는 쿼드를 두 개의 삼각형, 즉 으로 분할 할 예정입니다. 그러나 두 번째로 반복해야하므로 비효율적입니다. 미리 충전 된 픽셀 반복 바운딩 박스 여기쿼드를 사용하는 중심 좌표

+0

"쿼드"는 사변형을 의미합니까? – Jacob

+0

예, 네 사변형 – esmitt

답변

0

가있다 감사

esmitt ( 예로는, I는 가 2 삼각형에 의해 형성된 바운딩 박스에 속하는 첫번째 삼각형 이송 2 삼각형을 채우기) 당신이 뭘 해야하는지 파이썬 예제 에 대한 oking. 여러분이 아마 알고 있듯이, 2 차원에서 쿼드에 대해 고유하게 정의 된 중심 좌표가 없습니다 (3 차원에서의 tetrahedra에 대한 중심 좌표가 있지만 그것은 또 다른 것입니다).

import sys 

def fill(xa, ya, xb, yb, xc, yc, xd, yd): 
    abx = yb - ya 
    aby = xa - xb 
    kab = - (xa*abx + ya*aby) 

    bcx = yc - yb 
    bcy = xb - xc 
    kbc = - (xb*bcx + yb*bcy) 

    cdx = yd - yc 
    cdy = xc - xd 
    kcd = - (xc*cdx + yc*cdy) 

    dax = ya - yd 
    day = xd - xa 
    kda = - (xd*dax + yd*day) 

    for y in xrange(25): 
     for x in xrange(79): 
      if (x*abx + y*aby + kab >= 0 and 
       x*bcx + y*bcy + kbc >= 0 and 
       x*cdx + y*cdy + kcd >= 0 and 
       x*dax + y*day + kda >= 0): 
       sys.stdout.write('+') 
      else: 
       sys.stdout.write('-') 
     sys.stdout.write('\n') 

fill(10, 5, 
     6, 22, 
     60, 17, 
     70, 9) 

기본적으로 모든 에지에 대한 선 계수를 계산하고 그 포인트가 각각의 올바른면에 있는지 확인합니다. 라인 계수는 정규화되지 않았습니다. 히트/미스 테스트가 필요하지 않은 경우 (x nx + y ny + nk의 크기가 아닌 부호 만 검사하기 때문에).

이 접근법은 볼록 지향형 쿼드가 필요합니다. ...

+1

.. 접근법은 또한 쿼드가 볼록해야합니다. – brainjam

+0

감사 ... 추가되었습니다. 또한 쿼드는 자기 교차가 아니어야하지만 "지향적 인"것은 그것을 포함한다고 생각합니다. – 6502