5

画面上の目の動きを分析して、原点を画面の左下隅に設定しました(その時点で変更するのは難しいです)。

いくつかのポイントと画面の中心との間の距離を計算するために、以下に示す簡単な式を使用します。問題は、これを条件文で使用すると、醜くなることです。

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

ノルムをカスタマイズして、ポイントと原点の間ではなく、ポイント間の距離を計算する方法はありますか?

または私の場合、原点を現在の座標系の「中心」に設定しますか?

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とnewCNormを定義します。例:

$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] *)

この単純な関数では、代わりに 2 番目のケースを使用できますが、このメソッドの有用性がより複雑な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 に答える