2015-07-21 152 views
1

我創建了簡單的窗體,現在我想在相對座標中繪製單個對象(矩形,圓形,線..)。 這裏的主要問題是在窗體中間創建二維笛卡爾座標系。是否有可能以及如何做?創建笛卡爾座標系c#窗體窗體繪圖

主要問題是如何有效地將絕對座標轉換爲相對?如何創建我自己的系統,所以我得到的結果數字(負面,積極取決於象限),而不是像素?

Idea

當前我製作了MouseMove事件以顯示Cursor.Position.X,Cursor.Position.Y的鼠標當前位置,並將其顯示在標籤中。顯示的座標是像素,如何改變?我已經閱讀了一些關於使用PointToClient方法進行轉換的內容,但我不太瞭解它。

我被捆綁到windows窗體becouse我已經在win窗體中創建了一個程序,現在我只是想將此功能添加到它。

感謝

+0

您是否嘗試過使用變量來抵消當前位置? I.E. var offsetX = control.Width/2; (請記住,你需要確定如何處理奇數大小) – Tebc

+0

,這對我沒有任何幫助......我設法創建了面板大小1; 1並將它放在中間,然後我使用了' Point point = panel2.PointToClient(Cursor.Position); label1.Text =「當前座標:」+ point.ToString();'這是新鮮的,並不是我的問題的清晰解決方案,我想找到更好的解決方案 – dodoria1992

+0

[繪圖控制時翻轉座標可能重複]( http://stackoverflow.com/questions/1485745/flip-coordinates-when-drawing-to-control) – TaW

回答

0

你最有可能尋找的是Graphics.TranslateTransformGraphics.ScaleTransform

private void Transform(PaintEventArgs e) 
{ 
    e.Graphics.ScaleTransform(width, height); 
    e.Graphics.TranslateTransform(xOffset, yOffset); 
} 

您還需要確保,無論繪圖方法你使用有兩種PointF結構或Single秒的過載。

當然,你也可以在你的最後處理所有這些。通過表單的寬度和高度縮放輸入/輸出座標,然後翻譯一半即可獲得相同的結果。

編輯 - 爲了增加一些清晰度,Windows始終期望您的座標以像素形式顯示。您可以使用上述轉換以不同規模完成您的工作,然後轉換爲Windows預期的格式。

設置翻譯應該很簡單。如果你想要表格的中間部分,你只需要翻譯一半寬度和一半高度。如何選擇縮放座標將取決於您需要使用的範圍(即-1.0到1.0,-0.5到0.5等)。