分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
最近要做乙個所見即所得的圖形編輯器,遇到了乙個問題:如果以畫素為單位在螢幕上畫了一條直線後,那麼如何知道它在螢幕上的物理長度?例如,假設我們在vc6中用嚮導新建乙個簡單的單文件程式pixertoinch,在它的ondraw函式中有如下**:
[cpp]view plain
copy
print?
void cpixertoinchview::ondraw(cdc* pdc)
void cpixertoinchview::ondraw(cdc* pdc)
那麼在我的aoc915sw顯示器的螢幕上,實際測量的結果為水平線實際長度為接近31公釐,豎線的長度為大約為接近33公釐,為什麼會出現這個結果呢?我查了很多資料,發現許多資料講都是用dpi計算,但結果與我的實際不符,後經與網友七葉討論,終於找到了正確的計算方式,現整理如下,以供後來者參考。
為了計算螢幕上的顯示長度,需要知道如下幾個引數
1、顯示器的最大解析度。顯示器的最大解析度可以去查該型號顯示器的技術手冊,例如對我的aocsw915顯示器,其最大解析度為1440*900。注意:要把顯示器的最大解析度和顯示卡的最大解析度區別開來,在桌面上右鍵點"屬性"->設定裡看到的最大解析度有可能是顯示卡的最大解析度,比如我機器上的顯示卡型號為intel 82945g express chipset ,它的最大解析度是2048*1536。
如果想直接檢視顯示器的最大解析度,方法如下,在"屬性"->"設定"裡點"高階"->"監視器",選中"隱藏該顯示器無法顯示的模式",點確定後回到前面的對話方塊,此時看到的最大解析度就是顯示器的最大解析度了。
2、windows系統的實際解析度,即桌面上右鍵點"屬性"->設定裡的螢幕解析度的值,我的是1280*768
3、顯示器的點距,這個也需要查顯示器的技術引數,aocsw915的點距為0.285mm
有了上面幾個個引數之後,我們就可以計算出某個方向上的直線的實際長度了
公式為
螢幕長度(單位為公釐)=畫素長度*最大分辯率*點距/當前解析度
例如對我的**,螢幕上橫線的長度為
96*0.285*1440/1280 = 30.78mm
豎線的螢幕長度為
96*0.285*900/768= 32.0625mm
和我的實際測量結果吻合。
小結:將畫素長度乘當前的點距即可求出螢幕的實際長度,但是顯示器標出的點距是在最大分辯率下的點距(此時也稱顯示器處於點對點模式)此時點距最小,當分辯率不是最大時,相當於把點距拉長了,此時的點距要考慮乙個換算係數,即最大解析度/當前解析度,因此最後的公式為
畫素長度*(最小點距*最大解析度/實際分辯率)
給我老師的人工智慧教程打call!
OPENGL 單位長度對應螢幕畫素
fovy 視角,指定視景體的視野的角度,以度數為單位,y軸的上下方向 x軸的視角可以由y軸視角和視景體的寬高比計算出 aspect 視景體的寬高比 視窗的縱橫比,即x y znear 指定觀察者到視景體的最近的裁剪面的距離 必須為正數 zfar 指定觀察者到視景體的最遠的裁剪面的距離 必須為正數 在...
畫素真實的物理長度
畫素真實的物理長度 畫素真實的物理長度怎麼計算呢?請拿出一把尺子,丈量你的顯示器的可見寬度 我這裡是 11.2992 英吋 除以橫向解析度 我這裡是 1024 畫素 得到的就是每個畫素的物理長度。注意 通常所說的顯示器尺寸不能直接用來作為寬度的概念 那麼通常所說的顯示器的尺寸是怎麼回事?crt顯示器...
畫素真實的物理長度
畫素真實的物理長度怎麼計算呢?請拿出一把尺子,丈量你的顯示器的可見寬度 我這裡是 11.2992 英吋 除以橫向解析度 我這裡是 1024 畫素 得到的就是每個畫素的物理長度。注意 通常所說的顯示器尺寸不能直接用來作為寬度的概念 那麼通常所說的顯示器的尺寸是怎麼回事?crt顯示器的尺寸指映象管的對角...