2017-01-23 186 views
0

我有一個面板,其中有一個backgroundimage模擬XY圖形,如下圖所示。將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) 

但我認爲這並不好做這樣的事情。任何想法以更好的方式做到這一點?

---- ----編輯

迄今爲止最好的方法:

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

+0

會[模](https://en.wikipedia.org/wiki/Modulo_operation)幫助? –

+0

@UweKeim看起來像你們!我想搜索一個類似的功能來測試它! –

+0

所以你的面板是500px x 500px或200px x 200px?你想從(-100到100)轉換爲(0到500)?如果是的話,你可以簡單地做:'(X + 100)*(500/200)'其中200是距離-100到100 –

回答

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。

+0

正如我所說的,「如果輸入是X = -100且Y = 50?它不能正常工作..圖中的Y = 50與面板中的Y = 150不同。' –

+0

它取決於象限... –

+0

我更新了答案'Y0 = 100 - Y'請審查並接受它,如果它確定 –

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 
+0

我需要一個方法,因爲它適合的象限。它每次都不起作用。查看編輯! –

+0

@ i.Dio - 對於笛卡爾分是什麼不起作用? – dbasnett

0

你在看什麼是翻轉Y,然後翻譯原點。從面板 到笛卡爾。

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

做相反的事情。

x0 = x + 100 
y0 = -y + 100 

enter image description here

+0

我如何用我的例子來管理這個? –

+0

@ i.Dio你在我的答案中嘗試了第二個公式嗎?它會給你輸入相同的輸出。 –

+0

是的。它只使用「圖像的一部分」(最後一個)就可以正常工作。但它是面板中的背景圖像,我不能只顯示它的一部分 –