Tôi đã cố gắng kết hợp một cái gì đó cho phép tôi trích xuất các điểm từ một ListPlot để sử dụng chúng trong các tính toán tiếp theo. Cách tiếp cận hiện tại của tôi là chọn các điểm với một Locator []. Điều này làm việc tốt cho việc hiển thị các điểm, nhưng tôi không thể tìm ra cách để trích xuất các giá trị số từ một cấu trúc có phần tử Dynamic []. Dưới đây là một ví dụ khép kín. Bằng cách kéo bộ định vị màu xám, bạn sẽ có thể chọn các điểm (được chỉ định bởi bộ định vị màu hồng và được lưu trữ trong q
, một danh sách gồm hai phần tử). Đây là dòng thứ hai bên dưới cốt truyện. Bây giờ tôi muốn chuyển q [[2]] cho một hàm, hoặc có lẽ chỉ đơn giản là hiển thị nó. Tuy nhiên, Mathematica xử lý q
là một thực thể duy nhất với đầu Dynamic
và do đó việc lấy phần thứ hai là không thể (do đó là thông báo lỗi). Bất cứ ai có thể làm sáng tỏ làm thế nào để chuyển đổi q
vào một danh sách thường xuyên?Chuyển đổi cấu trúc Động [] thành danh sách số
EuclideanDistanceMod[p1_List, p2_List, fac_: {1, 1}] /;
Length[p1] == Length[p2] :=
Plus @@ (fac.MapThread[Abs[#1 - #2]^2 &, {p1, p2}]) // Sqrt;
test1 = {{1.`, 6.340196001221532`}, {1.`,
13.78779876355869`}, {1.045`, 6.2634018978377295`}, {1.045`,
13.754947081416544`}, {1.09`, 6.178367702583522`}, {1.09`,
13.72055251752498`}, {1.135`, 1.8183153704413153`}, {1.135`,
6.082497198000075`}, {1.135`, 13.684582525399742`}, {1.18`,
1.6809452373465104`}, {1.18`, 5.971583107298081`}, {1.18`,
13.646996905469383`}, {1.225`, 1.9480537697339537`}, {1.225`,
5.838386922625636`}, {1.225`, 13.607746407088161`}, {1.27`,
2.1183174369679234`}, {1.27`, 5.669799095595362`}, {1.27`,
13.566771130126131`}, {1.315`, 2.2572975468163463`}, {1.315`,
5.444014254828522`}, {1.315`, 13.523998701347882`}, {1.36`,
2.380307009155079`}, {1.36`, 5.153024664297602`}, {1.36`,
13.479342200528283`}, {1.405`, 2.4941312539733285`}, {1.405`,
4.861423833512566`}, {1.405`, 13.432697814928654`}, {1.45`,
2.6028066447609426`}, {1.45`, 4.619367407525507`}, {1.45`,
13.383942212133244`}};
DynamicModule[{p = {1.2, 10}, q = {1.3, 11}},
q := [email protected]
[email protected][[
Ordering[{#, EuclideanDistanceMod[p, #, {1, .1}]} & /@ test1,
1, #1[[2]] < #2[[2]] &]]];
Grid[{{Show[{ListPlot[test1, Frame -> True, ImageSize -> 300],
[email protected][Dynamic[p]],
[email protected]
Locator[q, Appearance -> {Small},
Background -> Pink]}]}, {[email protected]}, {q},{q[[2]]}}]]
+1: Tôi hoàn toàn bối rối. 'Dynamic' không xuất hiện như thể nó có thể được gỡ bỏ. Tôi đã xem q dưới 'FullForm' và không có gì để lấy; các bên trong vẫn chưa được đánh giá trước khi nó được hiển thị. Tôi đã thử đặt 'x = q', nhưng' Dynamic' đã được chuyển vì vấn đề hiển thị. – rcollyer