2

マテマティカ

DynamicModule[{list = {}}, 
 EventHandler[
  Dynamic[Framed@
    Graphics[{BSplineCurve[list], Red, Line[list], Point[list]}, 
     PlotRange -> 2]], {{"MouseClicked", 
     1} :> {AppendTo[list, 
      MousePosition["Graphics"]]}}, {"MouseClicked", 2} :> 
   Print[list]]]

Mathematica を持っていない家で上記のことをしたいです。好きなツールを使用してください。私は Python と R を使用するのが好きですが、ソリューションの候補には満足しています。最初に頭に浮かんだのは RStudio と this question hereでしたが、これを行うためのより良い方法があるかどうかはわかりません。

X で対話型 GUI の革新を行うにはどうすればよいですか?

Mathematica の手順 - スニペットの概要

1. you click points

2. you will see BSplineCurve formating between the points and points are red

3. points are saved to an array

4. when finished, you click `right-mouse-button` so array to stdout
4

3 に答える 3

5

あなたが説明したことを行うR関数は次のとおりです。

dynmodfunc <- function() {
    plot(0:1,0:1,ann=FALSE,type='n')
    mypoints <- matrix(ncol=2, nrow=0)
    while( length(p <- locator(1, type='p', col='red')) ) {
        mypoints <- rbind(mypoints, unlist(p))
        plot(mypoints, col='red', ann=FALSE, xlim=0:1, ylim=0:1)
        if(nrow(mypoints)>1) {
            xspline(mypoints, shape=-1)
        }
    }
    mypoints
}

(out <- dynmodfunc())

shape引数をxsplineに変更して、スプラインのスタイルを変更できます。このバージョンは、x 値と y 値を含む 2 列の行列を返しますが、必要に応じて別の構造に変更できます。他にもカスタマイズできるものがたくさんあります。

出力をMathematica に貼り付ける関数を追加しました:

matrix2mathematica <- function(x) {
    paste0( '{', 
        paste0( '{', x[,1], ', ', x[,2], '}', collapse=', '),
    '}')
}

cat( matrix2mathematica(out))
于 2012-08-22T19:15:41.600 に答える
1

の簡単な例locator:

plot(1:10)
point <- locator(1)
# now click somewhere on the plot

point
$x
[1] 8.010256

$y
[1] 7.980781

(もちろん、クリックした場所によって結果は異なります)

于 2012-08-22T18:39:31.943 に答える