5

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

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

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

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

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

4

2 回答 2

4

你能用吗EuclideanDistance

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

或定义 a$Center和 a new CNorm,例如

$Center = {cx, cy};
CNorm[pos:{x_, y_}] := EuclideanDistance[pos, $Center]
于 2011-06-12T14:21:42.297 回答
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
   平方[10]

更改默认中心:

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

myNorm2[{5, 7}]
   平方[10]
于 2011-06-12T22:20:42.590 回答