将XY参考转换为像素参考

时间:2017-01-23 11:37:35

标签: vb.net

我有一个面板,其backgroundimage模拟了XY图,如下图所示。

我根据用户输入动态创建pictureboxes

  • 图片数量
  • (X,Y)坐标

PanelPng

问题是坐标是在本机软件中定义的,范围为X and Y from -100 to +100。我的面板是200px x 200px。

我正在尝试类似的事情:

If X < 0 and then 
   X0 = X-100
ElseIf X > 0 then 
   X0 = X+100
Else 
   X0 = X
End If

(...)
PictureBox(n).location = new point ( X0,Y0 )

但我认为做这样的事情并不好。有没有想过以更好的方式做到这一点?

---- ---- EDIT

目前为止的最佳方法:

Select Case X And Y
            Case CInt(X < 0 And Y > 0)
                X0 = X + 100
                Y0 = Y - 100
            Case CInt(X < 0 And Y < 0)
                X0 = X + 100
                Y0 = Y + 200
            Case CInt(X > 0 And Y > 0)
                X0 = X + 100
                Y0 = Y + 100
            Case CInt(X > 0 And Y < 0)
                X0 = X + 100
                Y0 = Y + 200
            'Missing when X=0 and so on
End Select

----编辑----

现在看一下这个例子。

您提供的所有答案都不符合问题。

| X  | Y  | | X0 | Y0  |
|-100|100 | | 0  | 0   |
| 20 | 40 | |120 | 60  |
| -60|-20 | | 40 | 120 |
|  60|-80 | | 160| 180 |

cartesian vs panel location

3 个答案:

答案 0 :(得分:2)

只需X0 = X + 100Y0 = 100 - Y即可!例如:

  • 如果X = -100则X0为0,

  • 当X = 0时,X0为100

  • 当X = + 100时,X0为200,

因此,当X介于-100到100之间时,X0将在0到200之间,如您所愿!

编辑为: Y0 = 100 - Y 检查您的样本数据及其确定

  • 如果Y = -100则Y0为200,

  • 当Y = 0时,Y0为100,

  • 当Y = + 100时,Y0为0.

答案 1 :(得分:0)

看起来您正在尝试将笛卡尔坐标转换为屏幕到坐标。

    Dim xmin As Integer = -100
    Dim xmax As Integer = 100
    Dim xrng As Integer = xmax - xmin

    Dim ymin As Integer = -100
    Dim ymax As Integer = 100
    Dim yrng As Integer = ymax - ymin

    Dim center As New Point(xrng \ 2, yrng \ 2) 'center on screen

一旦我们有了中心,那么其他笛卡尔坐标就可以转换为屏幕坐标。

    Dim newcpt As New Point(-50, 50) 'new cartesian pt
    Dim drawpt As New Point(center.X + newcpt.X, center.Y + newcpt.Y) 'new cartesian pt translated to screen location

答案 2 :(得分:0)

您正在寻找的是翻转Y然后翻译原点。从面板  笛卡儿。

x0 = x - 100
y0 = -(y - 100)

反过来做相反的事情。

x0 = x + 100
y0 = -y + 100

enter image description here