Mathematica中笛卡尔坐标系中的计算距离

时间:2011-06-12 14:10:42

标签: wolfram-mathematica distance norm cartesian

分析屏幕上的眼动,我将原点设置在屏幕的左下角 (那时很难修改。)

尝试计算某些点与屏幕中心之间的距离我使用下面显示的简单公式。 问题是在条件语句中使用它会变得很难看。

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

有没有办法自定义Norm来计算点之间的距离,而不是点和原点之间的距离?

或者在我的情况下,将原点设置为当前坐标系的“中心”?

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:4)

Simon方法的一个细微变化是在函数中使用默认值,而不是全局变量($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]