2011-06-12 2 views
5

화면상의 눈동자를 분석하기 위해 원점을 왼쪽 하단 구석 인 (그 시점에서 수정하기가 어렵습니다)으로 설정했습니다.Mathematica의 데카르트 좌표계에서의 거리 계산

일부 지점과 화면 중앙 사이의 거리를 계산하려고하면 아래에 표시된 간단한 수식을 사용합니다. 문제는이 조건문을 사용하면 추한 것입니다.

Sqrt[ 
(
(fixationX - centerX)^2 + (fixationY - centerY)^2 
) 
] 

표준을 사용자 지정하여 점과 원점 사이가 아닌 점 사이의 거리를 계산하는 방법이 있습니까?

내 경우에는 현재 좌표계의 "중심"에 원점을 설정 하시겠습니까?

답변

4

시몬의 방법에 약간의 변화가 아니라 글로벌 변수 ($Center) 이외의 기능에 디폴트 값을 사용하는 것이다.

myNorm[pos:{_, _}, center_:{5, 5}] := EuclideanDistance[pos, center] 

공지 사항 _:{5, 5}의 사용은 기본 값을 정의 할 수 :

(5 5), 다음 기본 원점은 가정하자.

myNorm[{5, 7}] 

(* Out[]= 2 *) 

또는 일시적 센터와 다른 사용 : 이제

당신이 할 수있는이 간단한 함수의

myNorm[{5, 7}, {8, 8}] 

(* Out[]= Sqrt[10] *) 

을 대신 두 번째 경우에 EuclideanDistance을 사용할 수 있지만 나는 희망 당신은이 방법의 유틸리티가 myNorm의 정의보다 복잡하다는 것을 알 수 있습니다.

이 방법의 단점은 기본 센터를 쉽게 변경할 수 없다는 것입니다.

Options[myNorm2] = {Center -> {5, 5}}; 

myNorm2[pos : {_, _}, OptionsPattern[]] := 
EuclideanDistance[pos, OptionValue[Center]] 

구문입니다 :

myNorm2[{5, 7}] 

myNorm2[{5, 7}, Center -> {8, 8}] 
2
Sqrt[10]

하나 쉽게 기본 중심을 변경할 수 않지만, 더 자세한 또 다른 변화는, Options가 사용하는 것입니다

기본값 변경 입력 :

SetOptions[myNorm2, Center -> {8, 8}]; 

myNorm2[{5, 7}] 
Sqrt[10]
+0

@ 500 오신 것을 환영합니다. 다른 방법에 대한 나의 업데이트 된 답변을 참조하십시오. –

+0

첫 번째 버전에서 '기본값'과 똑같은 실수를 저 지르겠습니다. 프로젝트를 진행할 때까지 나는 그저 맨 위에 "$ xyz를 변경하면 다음을 재정의해야합니다. – Simon

+0

@Simon 그것이 우리 둘 다 있다면, 나는 이것에 대해 질문을 올릴 것입니다. 'DefaultValues ​​[f]'가 효과없이 변경된다는 사실은 혼란 스럽습니다. –

4

당신은 EuclideanDistance

In[1]:= EuclideanDistance[{x,y}, {cx,cy}] 
Out[1]= Sqrt[Abs[-cx +x ]^2 + Abs[-cy + y]^2] 

를 사용하거나 $Center 새로운 CNorm, 예를 정의 할 수 있습니다

$Center = {cx, cy}; 
CNorm[pos:{x_, y_}] := EuclideanDistance[pos, $Center] 
+0

내가 전자 메일을보기 전에 나는 지금 내 기능이 작동 구현하는 것을 기다릴 수,이 게시, 감사합니다! – 500

+0

@ 500, Simon도 이메일 지원을 받고 있습니까?매쓰 매 티카를 배웠을 때 제가 당신을 도와 주었으면 좋겠습니다. :-) –

+0

@ Mr 마법사, 진지하게, 그것은이 관대함과 전문성으로 인해 동기 부여가되었습니다! 나는 당신이 그것을 좋아할 희망과 함께 곧 당신에게 나의 노트를 보낼 것이다! – 500