我有一个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,应该表示如果它们介于-2之间,则应绘制X轴上的值和+2,对于Y轴值的电流应该被绘制,例如,如果它们在-10微米和+10微米之间
我希望此方法尽可能独立,因此如果我调整图片框的大小,则会正确更新比例。
这是我的实际值的第一个数据点:( - 0.6375,-0.00000993375),我的方法将其翻译为(24.515625,932.899536),这个数据超出了piturebox的大小。
通常二极管曲线如下所示:
有什么想法吗?
答案 0 :(得分: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)));
答案 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;
}