Compute distance in Cartesian Coordinate System in Mathematica

北城以北 提交于 2019-12-07 06:04:18

问题


Analyzing Eye-movements on a screen, I set my origin to the bottom left corner of it (Hard to modify at that point).

Trying to compute distance between some points and the center of the screen I use the simple formula displayed below. Problem is that using this in conditional statement, it gets ugly.

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

Is there a way to customize Norm to compute distance between points and not between a point and the origin ?

Or in my case, set the origin to be at the "center" of the current coordinate system ?


回答1:


A slight variation of Simon's method is to use a default value in the function, rather than a global variable ($Center).

Suppose your default origin is (5, 5), then:

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

Notice the use of _:{5, 5} to define the default value.

Now you can do:

myNorm[{5, 7}]

(* Out[]= 2 *)

Or temporarily use a different the center with:

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

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

For this simple function, you could use EuclideanDistance in the second case instead, but I hope you can see the utility of this method were the definition of myNorm more complex.

The downside to this method is that you cannot easily change the default center.


Another variation that does allow one to easily change the default center, but is more verbose, is to use Options:

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

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

Syntax is:

myNorm2[{5, 7}]

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

Changing the default center:

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

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



回答2:


Can you just use EuclideanDistance

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

Or define a $Center and a new CNorm, e.g.

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


来源:https://stackoverflow.com/questions/6322390/compute-distance-in-cartesian-coordinate-system-in-mathematica

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!