導航:首頁 > 器材知識 > 在c里怎麼把設備坐標轉化為邏輯坐標

在c里怎麼把設備坐標轉化為邏輯坐標

發布時間:2022-11-26 19:23:12

A. VC 圖形編輯 求助!

設備坐標捕捉點坐標後,將其轉換為邏輯坐標

轉換方法如下:
CClientDC dc(this);
然後和繪圖之前所做的 SetViewMode,SetViewportOrg,SetWindowOrg 一致的方法對這個dc做變換
最後轉換
dc.LPtoDP(&point);

可以創建一個函數,在繪圖前和轉換前調用:
MyPrepareDC(CDC * pdc)
{
SetViewMode(...
SetViewOrg...
SetWindowOrg.....
}

然後繼承 OnPrepareDC 去調用這個函數
OnPrepareDC( CDC * pDC,...)
{
MyPrepareDC(pDC);
}
這樣就可以在其他地方使用了

CClientDC dc(this);
MyPrepareDC(&dc);
dc.LPtoDP(&point);

B. 求教C++:MSDN上說DPtoLP函數能將設備坐標轉化為邏輯坐標,請問轉化後的邏輯坐標存在哪裡

函數原型:BOOL DPtoLP(HDC hdc, LPPOINT lpPoints, int nCount);參數:hdc:指向設備環境的句柄。lpPoints:指向POINT結構數組的指針,每個POINT結構中的X和Y坐標將被轉換。

lpPoints所指的指在調用完DPtoLP後會被修改

C. vc邏輯坐標和設備坐標的問題

如果我說的對,你加分給我呀!
你的概念好模糊呀!
1.繪圖函數用的全是邏輯坐標。
2.顯示器解析度就是象素點!800*600,就是800個象素寬乘以600個象素高的矩陣。也就是說坐標最大值就是800和600,與顯示器大小無關,只與顯示器解析度設置有關。這叫"設備無關性"
3.MM_HIMETRIC映射模式下,1邏輯單位等於0.001毫米(不是0.01mm)。假設你的顯示器高150mm,那麼邏輯坐標Y=150000;那麼邏輯坐標與設備坐標的轉換比是:150000:800=187.5
4.CPoint point(5, 6); 5,6全是邏輯值
5.dc.LPtoDP(&point); 5/18.75=0.266;6/18.75=0.32。而像素應是正整數。當然就是0了。
6.dc.DPtoLP(&point); //轉換後:x=156, y = -187
將(0,0)程序計數都是從0數的,不是1.所以坐標是0,數值應是1,轉換成邏輯坐標是187.5,坐標類型是整數就變成187了。同理:600象素點是X,轉換後就變成了0,156了
怎麼樣,明白了就加分給我吧,我也是初學者,想清這個理花了我4天,近50個小時。沒功勞也有苦勞呀!

D. 什麼是邏輯坐標和設備坐標

對於屏幕,邏輯坐標是第一象限,設備坐標是第四象限,當然數值都是正值。
就是說屏幕的邏輯坐標是左下角是原點,整個屏幕都處於第一象限。
屏幕的設備坐標是左上角是原點。

E. VC中的坐標點如何確定

建立以左上角為原點,X軸和Y軸為1000的坐標
我們可以用以下代碼:

void CTtView::OnDraw(CDC* pDC)
{
CTtDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rect;
GetClientRect(&rect);

pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetViewportOrg(0,0);
pDC->SetViewportExt(rect.right,rect.bottom);

pDC->SetWindowOrg(0,0);
pDC->SetWindowExt(1000,1000);

pDC->MoveTo(50,50);
pDC->LineTo(50,950);
pDC->LineTo(950,950);
pDC->LineTo(50,50);
}

代碼分析:

1. GetClientRect(&rect); 取得客戶區矩形區域,將其存放在rect中

2. 用pDC->SetMapMode(MM_ANISOTROPIC); 設置映射模式

3. 通過pDC->SetViewportOrg(0,0);設置邏輯坐標的原點

4. 通過pDC->SetViewportExt(rect.right,rect.bottom);和

pDC->SetWindowExt(1000,1000);來確定邏輯坐標下和設備坐標下的尺寸對應關系

5. 在MM_ANISOTROPIC模式下,X軸單位和Y軸單位可以不相同

6. 坐標方向的確定方法是如果邏輯窗范圍和視口范圍符號相同,則邏輯坐標的方向和視口的方向相同,即X軸向右為正,Y軸向下為正。

7. 如果將顯示模式改為MM_ISOTROPIC,那麼X軸單位和Y軸單位一定相同,感興趣的讀者可以自己使一下。

(二) 建立以視窗中心為原點的坐標
用如下代碼:

void CTtView::OnDraw(CDC* pDC)
{
CTtDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rect;
GetClientRect(&rect);

pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetViewportOrg(rect.right/2,rect.bottom/2);
pDC->SetViewportExt(rect.right,rect.bottom);

pDC->SetWindowOrg(0,0);
pDC->SetWindowExt(1000,-1000);

pDC->MoveTo(150,150);
pDC->LineTo(-150,-200);
pDC->LineTo(150,-150);
pDC->LineTo(150,150);
}

代碼分析:

1. 用 pDC->SetViewportOrg(rect.right/2,rect.bottom/2); 設置視口的原點。

2. 用pDC->SetViewportExt(rect.right,rect.bottom);和pDC->SetWindowExt(1000,-1000);來確定設備坐標和邏輯坐標的單位對應關系。

3. 因為邏輯窗范圍和視口范圍的符號不一致,縱坐標取反,所以Y軸向上為正。

F. 怎樣用VC改變對話框的邏輯坐標急!!!!!!!!!!

試試 SetWindowPos()

G. 設備坐標到邏輯坐標的轉換

如果邏輯坐標與設備坐標不同,在構造 ClientDC後,需要設置它的邏輯坐標系,否則它是按MM_TEXT方式工作,這會使得DPtoLP沒啥變化。
我一般是在重載的OnPrepareDC中處理設置邏輯坐標,這樣在滑鼠消息的函數中,得到ClientDC後,再調一下這個函數。

H. 你好!想向您請教一些VC++中有管設備坐標和邏輯坐標的問題

設備坐標(Device Coordinate)又稱為物理坐標(Physical Coordinate),是指輸出設備上的坐標。通常將屏幕上的設備坐標稱為屏幕坐標。設備坐標用對象距離窗口左上角的水平距離和垂直距離來指定對象的位置,是以像素為單位來表示的,設備坐標的X軸向右為正,Y軸向下為正,坐標原點位於窗口的左上角。

邏輯坐標(Logical Coordinate)是系統用作記錄的坐標。在預設的模式(MM_TEXT)下,邏輯坐標的方向和單位與設備坐標的方向和單位相同,也是以像素為單位來表示的,X軸向右為正,Y軸向下為正,坐標原點位於窗口的左上角。

更詳細,更參考http://blog.csdn.net/pathuang68/archive/2009/05/27/4219657.aspx或者搜索孫鑫的VC++教程,裡面講的很清楚。

I. delphi如何實現設備坐標和邏輯坐標的轉換

裝備坐標,就是物理坐標,比如,你的顯示裝備1024×768,1個像素代表1個物理坐標點。邏輯坐標,可以說是虛擬坐標,1般情況下,邏輯和物理坐標是有映照關系的,要繪制邏輯坐標,必須要先映照成對應的物理坐標,才可以。

閱讀全文

與在c里怎麼把設備坐標轉化為邏輯坐標相關的資料

熱點內容
steam令牌換設備了怎麼辦 瀏覽:246
新生測聽力儀器怎麼看結果 瀏覽:224
化學試驗排水集氣法的實驗裝置 瀏覽:156
家用水泵軸承位置漏水怎麼回事 瀏覽:131
羊水鏡設備多少錢一台 瀏覽:125
機械制圖里型鋼如何表示 瀏覽:19
測定空氣中氧氣含量實驗裝置如圖所示 瀏覽:718
超聲波換能器等級怎麼分 瀏覽:800
3萬軸承是什麼意思 瀏覽:110
鑫旺五金製品廠 瀏覽:861
蘇州四通閥製冷配件一般加多少 瀏覽:153
江北全套健身器材哪裡有 瀏覽:106
水表閥門不開怎麼辦 瀏覽:109
花冠儀表盤怎麼顯示時速 瀏覽:106
洗砂機多少錢一台18沃力機械 瀏覽:489
超聲波碎石用什麼材料 瀏覽:607
組裝實驗室製取二氧化碳的簡易裝置的方法 瀏覽:165
怎麼知道天然氣充不了閥門關閉 瀏覽:902
公司賣舊設備掛什麼科目 瀏覽:544
尚葉五金機電 瀏覽:59