2012-07-18 48 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

相关问题