Вычислить расстояние в декартовой системе координат в Mathematica

Анализируя движения глаз на экране, я установил свое происхождение в нижнем левом углу экрана (трудно изменить в этой точке).

Пытаясь вычислить расстояние между некоторыми точками и центром экрана, я использую простую формулу, показанную ниже. Проблема в том, что использование этого в условном выражении становится уродливым.

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

Есть ли способ настроить Norm для вычисления расстояния между точками, а не между точкой и началом координат?

Или в моем случае установить начало координат в "центр" текущей системы координат?

2 ответа

Решение

Небольшое изменение метода Саймона заключается в использовании значения по умолчанию в функции, а не глобальной переменной ($Center).

Предположим, что ваш источник по умолчанию (5, 5), тогда:

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

Обратите внимание на использование _:{5, 5} определить значение по умолчанию.

Теперь вы можете сделать:

myNorm[{5, 7}]

(* Out[]= 2 *)

Или временно использовать другой центр с:

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

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

Для этой простой функции вы можете использовать EuclideanDistance во втором случае вместо этого, но я надеюсь, что вы можете увидеть полезность этого метода были определения myNorm более сложный.

Недостатком этого метода является то, что вы не можете легко изменить центр по умолчанию.


Другой вариант, который позволяет легко изменить центр по умолчанию, но является более подробным, заключается в использовании Options:

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

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

Синтаксис:

myNorm2[{5, 7}]

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

Изменение центра по умолчанию:

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

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

Вы можете просто использовать 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]
Другие вопросы по тегам