2013-03-19 4 views
0

첫 번째 두 줄 사이에 세 개의 원을 그리는 작은 프로그램을 만들고 그 다음에 세 번째 줄이 닿거나 교차하는지 확인해야합니다. 나는 마지막 부분을 제외한 모든 것을 다했다. 영역을 0으로 결정하기 위해 포인트를 사용하려고합니다. 이는 세 번째 포인트가 실제로 라인을 교차한다는 것을 의미합니다. 권리? 아니면 다른 방법을 사용할 수도 있습니다. 기술적으로 세 번째 원은 선의 3 픽셀 내에있을 수 있습니다. 문제는 해시 태그 하단에 있습니다. 이것을 다른 방향으로 옮기는 데 도움이나 제안을 해주시면 감사하겠습니다. 고맙습니다. 3 원거북선 교차점, 좌표

import turtle 

x1, y1 = eval(input("Enter coordinates for the first point x, y: ")) 
x2, y2 = eval(input("Enter coordinates for the second point x, y: ")) 
x3, y3 = eval(input("Enter coordinates for the third point x, y: ")) 

turtle.penup() 
turtle.goto(x1, y1) 
turtle.pendown() 
turtle.circle(3) 

turtle.penup() 
turtle.goto(x2, y2) 
turtle.pendown() 
turtle.circle(3) 

turtle.penup() 
turtle.goto(x3, y3) 
turtle.pendown() 
turtle.circle(3) 

turtle.penup() 
turtle.color("red") 
turtle.goto(x1, y1) 
turtle.pendown() 
turtle.goto(x2, y2) 

a = (x1, y1) 
c = (x3, y3) 
#can't multiply sequence by non-int of type 'tuple' 

area = (a * c)/2  

if area == 0: 
    print("Hit") 
else: 
    print("Miss") 

답변

0

THER 센터 (X3, Y3)이고 반경 (3)을 가지고 있고 ([X1, Y1], [X2, Y2]) 선분 어떤 교차점을 결정하기 위해 시도하고있다.

선의 어떤 점이 원 안에 있으면 교차가 있습니다. 원 영역 수식은 다음과 같습니다. (x-x3)^2 + (y-y3)^2 < 3^2 이 부등식이 유지되는지 여부와 단 하나의 점이이 조건을 만족하는지 여부를 선상의 모든 점에 대해 테스트해야합니다. 선과 원이 교차한다고 결론을 내릴 수 있습니다. 첫 번째 단계는 선분의 ​​좌표 점 ([x1, y1], [x2, y2] 점 사이의 모든 점을 직선으로 결정)입니다. 그러면 루프에서이 점을 테스트 할 수 있습니다.

넌 (제 상수 (따라서 가교 제품 이해) 3 차원 공간의 평면을 포함하는 좌표 추가) 다른 두 한 정점에서 벡터를 정의하여 삼각형의 면적을 산출 할 수
0

,

#pseudocode 
b = (x2, y2, 1) - (x1, y1, 1) = (x2-x1, y2-y1, 0) 
c = (x3, y3, 1) - (x1, y1, 1) = (x3-x1, y3-y1, 0) 

후,

a = b cross c = (by*cz-bz*cy, bz*cx-bx*cz, bx*cy-by*cx) 

다음 두 벡터에 의해 정의되는 평행 사변형의 면적이며,이 결과 벡터의 크기를 가지고, 이들의 외적을

,
pa = |a| = ax^2 + ay^2 + az^2 

그런 다음 삼각형의 면적 (평행 사변형의 절반)을 얻기 위해 2로 나눕니다.

ta = pa/2 

출처 : http://en.wikipedia.org/wiki/Triangle_area#Using_vectors

0

암 I 라이트? 서로에게 서클의 위치는 중요하지 않습니까?

두 중심점 사이의 선에서 선형 함수를 만듭니다. (ax + b = y) 여기서 a는 그래디언트이고 b는 y- 교차점입니다.

90도까지 돌리기 쉽습니다. 역으로하고 부정하다.

두 번째 선형 함수의 b를 찾습니다. b '= y-a'* x. 한 번에 x, y를 원의 점 좌표로 대체하십시오. 이제는 구형 함수에 직사각형이며 세 번째 원호 점의 일부인 선형 함수가 있습니다.

이전 선형 함수를 새 함수와 교차합니다.

당신은 많은 것을 얻게 될 것입니다. 3. 원형 점과 로트 점 사이의 거리와 반경보다 큰 지 여부를 알아야합니다.

가 복잡 할 할
function makelinear (x1,y1,x2,y2){ 
     var temp=x2-x1; 
     if(temp==0)temp=0.00000000000001;//not clean but fast. 
     var a=(y2-y1)/temp, 
      b=y1-a*x1; 
     return[a,b]; 
     } 
function ninetydeg(a,b,x,y){ 
     var aout=1/a, 
      bout=y+aout*x; 
     return [aout,bout]; 
     } 
function lineintersection(a1,b1,a2,b2){ 
     var temp=a1-a2; 
     if(temp==0)temp=0.00000000000001; 
     var x=(b2-b1)/temp, 
      y=a1*x+b1; 
     return[x,y]; 
     } 
function distance(x1,y1,x2,y2){ 
     var x=x1-x2, 
      y=y1-y2; 
     return(Math.sqrt(x*x+y*y)); 
     } 

미안 해요, 난 짧은 시간에 다른 해결책을 발견했습니다

당신은이 기능 (JS)가 필요합니다. 벡터 솔루션이있을 수 있습니다.