2016-11-11 6 views
0

파이썬에서 두 개의 교차점을 정의하는 점을 계산하고 싶습니다. 계산하고자하는 점의 아래 그림을보십시오.파이썬에서 두 개의 교차점을 정의하는 모든 점을 계산하는 방법은 무엇입니까?

def get_circle_points(x_center, y_center, radius, n=20): 
    xpoints = [] 
    ypoints = [] 
    for i in range(0, n+1): 
     x = math.cos(2*math.pi/n*i) * radius + x_center 
     y = math.sin(2*math.pi/n*i) * radius + y_center 
     xpoints.append(x) 
     ypoints.append(y) 
    return xpoints, ypoints 

한 가지 중요한 제한이 나는, 순수한 파이썬 답을 numpy를 가져 괜찮지 할 수 없다는 것입니다 :

enter image description here

나는 하나 원을 정의하는 점을 계산하기 위해 다음과 같은 알고리즘을 가지고있다. (일부 과도한 계산과)

+0

제쳐두고 : 결코 그 점들을 모두 계산할 수는 없습니다. 무한한 숫자가 있습니다. – Chris

+0

다른 원 안에 있지 않고 한 원의 경계에있는 점만 원했던 것처럼 보입니다. – BrenBarn

+0

죄송합니다. 아마도 크리스는 모양을 이산화하고 점을 계산하기를 원합니다. 매개 변수 중 하나는 점 'n'의 밀도입니다 (Python 스크립트 참조). – HadiM

답변

1

아주 간단한 방법 :

sa = atan2(yc2-yc1, xc2-xc1) 

은 각도 범위의 첫 번째 원 포인트 생성으로

각도 시작하기 sa..sa + 2*Pi

확인 - 경우 점 (PX, PY)가 두 번째 원 밖에있는 경우 결과 목록에 추가 (px-cx2)^2+(py-cy2)^2 > r2^2

angl에서 두 번째 원을 생성합니다 전자 레인지 sa - Pi..sa + Pi

확인 - 점 (PX, PY)이 첫 번째 원 밖에있는 경우,이 목록을 (px-cx1)^2+(py-cy1)^2 > r1^2

더 효과적인 접근 방식을 결과에 추가 - 교차 각도 포인트 계산 만 필요한 각도 범위를 스캔합니다.