C#窗體應用之座標系打點操作

0前言

說的話:這幾天做了一個工具,是要接受串口傳來的座標(x,y),接着在電腦上打印出對應的點,同時包含系列畫板操作(滾條滾動,畫板縮放,重設原點,軌跡緩存)。原本以爲已經得到了位置信息,在畫板上打印會很簡單,畢竟打點函數是現成的,結果完全不是這麼回事。
比如:畫板座標和傳上來的座標其實是兩個座標系,不可同日而語。
打點是打出來了,但縮放定位操作又很彆扭。。。
經過一系列的整理,思路才逐漸清晰,這篇博客主要講訴下關於兩個座標系的對應,以及實現原理,對照着代碼看效果更佳哦!
在這裏插入圖片描述

1畫板座標與實際座標

1.1

在講這個之前,先來說明一下爲什麼要專門提到,這很重要,首先在畫板上打點,始終是在畫板座標上打點,打點區域表示畫板的區域,x和y的區間是[0-panel.size],均爲正值,且大小固定,當我們要畫的點在畫板外時,很多人都能想到可以利用滾條的值來實現。
爲此,畫板和真實左邊之間必定有一個映射關係,如下圖:

在這裏插入圖片描述
因此假設實際座標系(x,y)的區間爲 x.min<x<x.max;y.min<y<y.max;
滾條移動一次對應座標偏移一格,初始值爲0,區間便設爲(x.min,x.max);
畫板座標與實際時間座標的關係便爲:
panel.x=x+ScrollBar1.Value+panel1.Size.X/2
panel.y=y+ScrollBar2.Value+panel1.Size.Y/2

2利用滾條定位座標

不妨可以從上圖中看出,此時橫豎滾條的值即爲畫板中心所代表的真實座標的x,y,因此需要定位座標時僅需要修改滾條的值並刷新畫板即可完成對應點的定位

3放大與縮小

對於放大與縮小,要明確畫板的座標系是不會變的,變得只是畫板與真實座標之間的對應關係,因此給出變化後的公式如下:
panel.x=(x+ScrollBar1.Value)*n+panel1.Size.X/2
panel.y= (y+ScrollBar2.Value)*n+panel1.Size.Y/2
在這裏注意放大後由於對應關係的轉變,滾條的最值也應該相應變化,因此在定位時又要考慮滾條變化後對值的影響(我是直接在位時,自動將倍數設爲1,所以省去了一步)

4代碼

ps:代碼包括位置點的保存讀取,串口數據接受,原點的重新設置等等操作,不過畫板的核心在於雙座標系以及中心點的定位。
https://download.csdn.net/download/qq_35496059/11835215

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章