分析屏幕上的眼动,我将原点设置在屏幕的左下角 (那时很难修改。)
尝试计算某些点与屏幕中心之间的距离我使用下面显示的简单公式。 问题是在条件语句中使用它会变得很难看。
Sqrt[
(
(fixationX - centerX)^2 + (fixationY - centerY)^2
)
]
有没有办法自定义Norm来计算点之间的距离,而不是点和原点之间的距离?
或者在我的情况下,将原点设置为当前坐标系的“中心”?
答案 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]