3

更新しました:

データのリストプロットがあり、Mathematicaのリストプロットと重なる円のグラフィックの特定の境界内にあるすべてのデータポイントを収集したいと思います。

このようなことは可能ですか?

私が作った楕円は形です

{c, s, \[Theta]} = 
 1 /. ComponentMeasurements[f, {"Centroid", "SemiAxes", "Orientation"}]
Show[Rasterize[p], Graphics[{Red, Rotate[Circle[c, s], \[Theta]]}]]

Centroid、SemiAxes、およびOrientationプロパティを使用して楕円を入力できるフォームに、最下部のソリューションを適合させるのを手伝ってもらえますか?

4

1 に答える 1

6
data = RandomReal[{0, 1}, {100, 2}]
r = 1/5;
center = {1/6, 1/4};
sd = Select[data, EuclideanDistance[#, center] < r &]
Show[ListPlot@data, 
     Graphics@Circle[center, r], 
     Graphics[{Red, PointSize[Large], Point@sd}], AspectRatio -> 1]

Mathematica グラフィックス

編集

楕円の場合

data = RandomReal[{0, 1}, {100, 2}]
r = 1/5;
f1 = {1/6, 1/4};
f2 = {1/3, 1/5};
sd = Select[data, EuclideanDistance[#, f1] + EuclideanDistance[#, f2] < r &]
Show[ListPlot@data, 
     RegionPlot[EuclideanDistance[{x, y},f1] + EuclideanDistance[{x, y},f2] <r, 
                {x, 0, 1}, {y, 0, 1}], 
     Graphics[{Red, PointSize[Large], Point@sd}], AspectRatio -> 1]

Mathematica グラフィックス

編集 2

より良いコード

data = RandomReal[{0, 1}, {100, 2}]
r = 1/5;
f1 = {1/6, 1/4};
f2 = {1/3, 1/5};
inside[{x_, y_}, {f1_, f2_}] := Sum[EuclideanDistance[{x, y}, i], {i, {f1, f2}}];
sd = Select[data, inside[#, {f1, f2}] < r &];
Show[ListPlot@data,
     RegionPlot[inside[{x, y}, {f1, f2}] < r, {x, 0, 1}, {y, 0, 1}],
     Graphics[{Red, PointSize[Large], Point@sd}],
  AspectRatio -> 1]

編集 3

ここで、すべてがComponentMeasurements出力に変換されます

(*{c,s,t}=1/.ComponentMeasurements[f,{"Centroid","SemiAxes",\
"Orientation"}] *)
c = {.3, .4}
s = {.4, .2}
t = Pi/8

{s1, s2} = s
center = {cx, cy} = c
f = Sqrt[s1 s1 - s2 s2]
f1 = {f1x, f1y} = {cx + f Cos[t], cy - f Sin[t]}
f2 = {f2x, f2y} = {cx - f Cos[t], cy + f Sin[t]}
r = 2 Sqrt[f f + s2 s2]

data = RandomReal[{0, 1}, {100, 2}];

sd = Select[data, EuclideanDistance[#, f1] + EuclideanDistance[#, f2] < r &];
Show[
 ListPlot@data, 
 RegionPlot[ EuclideanDistance[{x, y}, f1] + EuclideanDistance[{x, y}, f2] < r,
              {x, 0, 1}, {y, 0, 1}], 
 Graphics[{Red, PointSize[Large], Point@sd}], 
AspectRatio -> 1]

Mathematica グラフィックス

于 2012-08-02T18:29:11.587 に答える