在GDI 中如何實現以左下角為原點的笛卡爾座標系

2022-07-04 19:00:14 字數 758 閱讀 8439

今天寫了乙個求點集合的凸包的乙個演算法,雖然結果求解出來了,但是想將過程用gdi+繪製出來,就需要將點繪製出來,然而c#gdi+中繪圖的座標與我們常用數學中笛卡爾座標系是不一樣的,所以就要轉換gdi+中的座標,通過以下的**的就能夠實現座標系的轉換,**如下所示:

//

將gdi+中原始的座標原點平移

g.translatetransform(0f, this

.height);

//變換x,y軸的正方向

g.scaletransform(1f, -1f);

ps:c#gdi+的座標以區域的左上角為原點,往下為y正方向,往右為x正方向。

ok,這樣就搞定了。

注意:

雖然這樣能夠將gdi+的座標變為笛卡爾座標系,但是y軸的座標刻度有點差別。我也不知道為什麼。我用50,50為原點,100,100繪製乙個矩形。但繪製出來後矩形的左下角距畫布左邊的距離和下邊的距離不一樣長,有點小偏差,其他的還好。我猜想可能是在上述**將座標原點平移的時候有點小問題,this.height和gdi+的座標的單位不一樣吧。gdi+中的座標是用預設用畫素為單位,可能控制項的高度和寬度所用的單位是用比畫素更小的單位吧。所以在g.translatetransform(0f,this.height)中並未實現將座標移到左下角去,因為單位的不統一造成的。

但是我現在也不知道控制項大小的單位是什麼,也不知道他們之間如何轉換,也沒找到相關的資料,希望哪位高手知道能夠告知。自己也會進一步的研究,若有結果,會及時分享的。

在JS中如何實現動作

在js中如何實現動作,舉例如下 例如,跳躍的函式底層原始碼 cc.jumpby function duration,position,y,height,jumps example var actionby cc.jumpby 2,cc.p 300,0 50,4 var actionby cc.jum...

在eagle中如何實現開槽

在電路板設計,有些特殊的地方需要進行開槽處理,以適應某些特殊的器件以及散熱需要。下面就來討論一下在eagle中如何實現這一操作。實際上,在eagle中,開槽使用的是第46層 milling層 在需要開槽的地方,用畫線工具畫出需要開槽形狀的邊緣即可。例如下圖中,由於中間的摩托羅拉高頻三極體mrf891...

談談在WebServer中如何實現CGI技術

談談在webserver中如何實現cgi技術 在webserver中,cgi技術的實現相信許多人很感興趣,不過在一些開源軟體如apache中,由於軟體規模大,相關模組多,直接去讀懂是如何實現的比較費勁,下面就來談談cgi技術的實現方法。要實現cgi技術,關鍵是要實現執行其他應用程式時,將應用程式的輸...