2014-02-18 27 views
0

我想通過鼠標在Matlab或者Simulink中輸入座標,通過鼠標器件在3D座標輸入的Matlab沒有內置工具,但是內置函數ginput只能存儲鼠標的二維座標,是否有可能在MATLAB/SIMULINK中通過鼠標器輸入三維座標?3D鼠標輸入在Matlab/Simulink中

+0

2D屏幕上的3D座標?至少可以說是不是很直觀,是嗎? –

+0

3D屏幕中的3D座標顯然。 – developer

+2

什麼是* 3-D *屏幕? –

回答

0

如果我理解正確,那麼當繪圖爲3D時,您希望獲得鼠標單擊的座標(在數據空間中)。也就是說,你點擊圖中的某個地方,它會返回你當前的位置。我實際上已經解決了這個確切的問題。

這個任務的主要困難 - 和其他海報已經暗示 - 它是你在點擊一個2D屏幕。因此,您無法在2D屏幕上唯一指定3個獨立位置。相反,單擊屏幕可定義垂直於屏幕平面的線段,沿着此線條的任何3D點都是同樣有效的。你明白爲什麼會出現這種情況嗎?

爲了演示,試試這個簡單的例子在Matlab:

surf(peaks); %draw a sample plot 
keydown = 2; 
while keydown ~= 0, 
    disp('Click some where on the figure'); 
    keydown = waitforbuttonpress; 
end 
currPt = get(gca,'CurrentPoint'); 
disp(currPt); 

你會觀察到currPt是2×3的矩陣。這定義了這條線的起點和終點。讓我們現在畫這條線:

hold on; 
plot3(currPt(:,1), currPt(:,2), currPt(:,3), 'k-', 'LineWidth', 2); 
view(-19,46); %rotate to view this line 

所以問題是:如何定義沿着這條線你想要選擇哪一點?那麼答案取決於你的第一個數據類型。如果您有點數據,則精確選擇頂點中的一個可能會非常棘手,您可能需要對數據進行一些後處理(例如,計算數據集中最接近currPt行的點)。如果您有修補程序或表面數據(如本例),則這只是一條線和一個平面的交點。

File Exchange上有一些工具可以爲各種數據集獲取3D點。我剛發現的一個是:http://www.mathworks.com/matlabcentral/fileexchange/7594-click3dpoint

+0

這是一個公共論壇。如果您有任何問題,請在這裏發佈,以便其他人可以從您的發現中受益。使用電子郵件打敗了這個論壇的重點。到目前爲止,你有什麼特別的嘗試?你卡在哪裏? – user1004061

+0

我願意協助您;我只是要求a)通過這個論壇,b)你展示一些你自己的努力。但如果你不需要幫助,那麼這就是你的特權。 – user1004061