2012-07-18 47 views
2

我有一個PictureBox,我想知道它的數據點(X,Y點)繪製二極管曲線。目前我的影片大小爲365 * 468像素。我正在抓我的頭來翻譯數據點,我必須像素友好值,因此曲線很好地繪製在圖片框上。將數據點轉換爲用於繪製的像素座標

到目前爲止,我已經嘗試過各種公式,但沒有成功!目前我被困在代碼中,它至少顯示出一點曲線!

private PointF[] TranslatePoints(PointF[] points) 
    { 
     var count = points.Count(); 
     var p = new PointF[count]; 

     for(var i = 0; i < count; i++) 
     { 
      p[i].X = DrawingArea.Width * (1 + (points[i].X/_voltageRange)); 
      p[i].Y = DrawingArea.Height * (1 - (points[i].Y * (float)Math.Pow(_currentRange, -1))); 
     } 

     return p; 
    } 

_voltageRange_currentRange是我想要的曲線是基於...它通常是+2應該意味着對X軸上的值,如果他們是-2到+2之間應繪製規模,對於當前的Y軸值應該繪製,例如,如果它們在-10微米和+10之間ü

我希望此方法儘可能獨立,因此如果我調整圖片框的大小,則會正確更新縮放比例。

這是例如第一個數據點,我有實際值:(-0.6375,-0.00000993375),我的方法將它轉換爲(24.515625,932.899536),這是超出大小piturebox。

通常二極管曲線看起來是這樣的:

enter image description here

任何想法嗎?

回答

2

我發現問題了!我必須在我使用的公式中將寬度和高度除以2!像這樣:

p[i].X = (DrawingArea.Width/2F) * (1 + (points[i].X/_voltageRange)); 
    p[i].Y = (DrawingArea.Height/2F) * (1 - (points[i].Y * (float)Math.Pow(_currentRange, -1))); 
0

Aftre縮放所需的座標以將形狀向後移動,因爲它會變大,但在另一側,起始位置將會不同,因此放大後需要將形狀拉回到原始起始位置。 所以你需要定義一個起始位置,該位置是最左下角的點。之後,您可以檢查原始和放大座標的X/Y差異,並使用以下值修正其他點:

var leftBottomPointOriginal = LeftBottom(points) 
var leftBottomPointScaledUp= LeftBottom(scaledUpPoints) 

var xCorrection = leftBottomPointScaledUp.X-leftBottomPointOriginal.X 
var yCorrection = leftBottomPointScaledUp.Y-leftBottomPointOriginal.Y 


for(var i = 0; i < count; i++) 
     { 
      p[i].X = DrawingArea.Width * (1 + (points[i].X/_voltageRange))-xCorrection; 
      p[i].Y = DrawingArea.Height * (1 - (points[i].Y * (float)Math.Pow(_currentRange, -1)))-yCorrection; 
     } 
+0

謝謝,你能解釋我應該分配給'leftBottomPointOriginal'和'leftBottomPointScaledUp'嗎?我沒有明白! – 2012-07-18 12:34:51

+0

我想在這裏你應該定位到中心位置,所以得到圖上0,0位置的點。如果按比例放大真實座標,則可以檢查差異並將圖形重新定位到中心。 – HamoriZ 2012-07-18 12:40:05

+0

好吧,它比這更簡單,我原來的方法是正確的,我只需要在我的等式中將高度和高度除以2!不管怎樣,謝謝。 – 2012-07-18 12:43:03

相關問題