2012-11-04 3 views

답변

24

의 오른쪽에있다. dot(a, b) == a.x*b.x + a.y*b.y는 벡터가 수직 여부를 찾을 수 있습니다 :

var dot = a.x*b.x + a.y*b.y 
if(dot > 0) 
    console.log("<90 degrees") 
else if(dot < 0) 
    console.log(">90 degrees") 
else 
    console.log("90 degrees") 

다른 방법을 넣습니다. dot > 0a이 "앞에오다"인 경우 b을 알려줍니다.


ba의 오른쪽에있는 가정합니다. b을 시계 반대 방향으로 90도 회전하면 a 앞에 표시됩니다.
a의 왼쪽에 b이 있다고 가정하십시오. b을 시계 반대 방향으로 90도 회전하면 a 뒤에 표시됩니다.

그러므로 dot(a, rot90CCW(b)) 부호는 b가 rot90CCW(b) == {x: -b.y, y: b.x}의 오른쪽 또는 왼쪽에 있는지 알려줍니다.

Simplyifying : @Eric에서 주석의 설명에서

var dot = a.x*-b.y + a.y*b.x; 
if(dot > 0) 
    console.log("b on the right of a") 
else if(dot < 0) 
    console.log("b on the left of a") 
else 
    console.log("b parallel/antiparallel to a") 
+0

에 오는 내적을하고 주어진 'A'와 'B'를 사용하여 예제를 취하고 대신에 '-A'와 '-B'를 보면, 각각 반대 방향을 가리키고 -B는 -A의 왼쪽에 있습니다.그러나 점 제품은 동일합니다. 즉, 코드가 반대의 대답을 제공합니다. 문제를 어떻게 정의했는지에 대한 대답은 내적 제품의 부호 이상입니다. – eh9

+1

@ eh9; 아니, B를 둘 다 거꾸로하면 오른쪽에 있어야합니다. 나는 "A가 앞으로 가리킬 경우, 어느 쪽이 B인지"라는 질문을 던집니다. – Eric

1

, ? "그것의 측면은 B에 놀라운 발전 점, 만약"

이 공식에서 대답은 간단합니다. "A"는 예에서와 같이 x 좌표가 0 일 때를 가리 킵니다. 이 가정에서 "B"는 x 좌표가 양수이고 오른쪽이 음수 일 때 왼쪽에 있고 0 일 때도 아닙니다.

일반 위치에서 "A"로 확장하면 다음과 같이 새로운 좌표계가 도입됩니다. "A가 앞으로 가리키는 좌표계에서 ...". 가장 단순한 새로운 좌표계는 기본 벡터가 A(1,0) 인 좌표계입니다. (A가 (1,0)의 배수이면 기본 상황을 단지 90도 회전합니다.) 좌표 변환은 L : P = (P_x, P_y) --> P' = (P'_x, P'_y) = (A_y * P_x - A_x * P_y, P_y)입니다. 이러한 종류의 선형 변환을 왜곡 변환이라고합니다. 테스트는 좌표 P'_x의 부호입니다. L이 A를 새로운 좌표계에서 벡터 (0,1)로 가져 갔는지 확인하십시오. 이 방법은 다른 대답과 동일한 산술을 사용합니다.

더 자세한 기하학적 내용이 밝혀 질 수 있도록이 글을 썼습니다.

-1

@Eric 그러나 벡터 크기가 크게 다를 경우 내적 제품에 근본적인 문제가 있습니다.

var dot = a.x * -b.y + a.y * b.x;

만약 (2, -2)와 b (-500, -500) 명확 B는 왼쪽에,하지만 난 것을 지적해야한다가 0보다 큰

+0

Welcome to Stack Overflow. 부분적으로 논평이므로이 대답을 주석에 넣는 것을 고려해야합니다. 그렇지 않으면, 당신은 그것을 정리하고 완전히 유용한 대답을해야합니다. –

+0

나는 시도했지만 적은 50 명의 담당자와 couldnt. – Gab

+0

아니, b는 오른쪽 (시계 방향) 여기, 오른쪽 좌표계를 가정 – Eric

관련 문제