世界座標系の位置をモ​ニターのピクセル位置​に変換できますか?

8 vues (au cours des 30 derniers jours)
MathWorks Support Team
MathWorks Support Team le 30 Juil 2012
VIEW や VIEWMTX 関数で得られる行列を用いて、('CurrentPoint' プロパティで得られるような)座標をコンピュータのモニター上のピクセル座標に変換しようと思います。'CurrentPoint' プロパティで得られる前後の2点は、同じ位置には投影されません。

Réponse acceptée

MathWorks Support Team
MathWorks Support Team le 30 Juil 2012
世界座標系からコンピュータのモニターの座標系に変換する機能は、MATLAB にはありません。
VIEW や VIEWMTX 関数は、"ビュー変換" 行列を出力します。この行列は、世界座標系での座標点をコンピュータ上での座標系に変換するためには用いることはできません。
理由は次の通りです。
"視点変換" は、世界座標から モニター/スクリーン座標 への変換機能の一部です。
ピクセルを世界座標系から変換するには、以下の変換行列の掛け算を用います。
ビューポート変換行列 (viewport transform matrix)
射影変換行列 (projection transform matrix)
ビュー変換行列 (view transform matrix)
正規化変換行列 (normalizing transform matrix)
モデリング変換行列 (model transform matrices)
正規化変換 が欠落しています。 正規化変換行列 N は、以下のようなものです。
xl=get(gca,'xlim');
yl=get(gca,'ylim');
zl=get(gca,'zlim');
N=[1/(xl(2)-xl(1)) 0 0 0; ...
0 1/(yl(2)-yl(1)) 0 0; ...
0 0 1/(zl(2)-zl(1)) 0; ...
0 0 0 1];
(座標軸の範囲に基づいた)正規化変換を使用することで、以下のように計算することができます。
A=view;
A = A*N;
このように、行列 A は、前後点をスクリーン上の同じ位置に変換させることができます。
ただし、残りの行列は考慮されていないため、これは正しい位置ではありません。これらの行列は、MATALB 関数で計算されたものではなく、また座標軸データから直接アクセスされたものでもありません。これらは情報目的のために記載されています。
ビューポート変換は、単純にウィンドウサイズです。ウィンドウがどこにあるか、または正方形ではない長方形かによって計算することができます。
この場合の射影変換は、単純に一様なスケールファクターですが、斜視図の場合はかなり複雑になります。
モデリング変換は、HGTRANSFORM オブジェクトの行列プロパティです。

Plus de réponses (0)

Catégories

En savoir plus sur 2 次元および 3 次元プロット dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!