내 C# WinForms 응용 프로그램에는 전압/전류 측정 결과 인 2 개의 곡선을 호스트하는 그림 상자가 있습니다. X 축은 전압이고 Y 축은 전류입니다. 전압 축은 -5에서 5까지의 범위이지만 현재 축은 -10 uA에서 10 uA 범위의 훨씬 작은 범위입니다. 작업은 두 번째 곡선이 첫 번째 곡선의 10 % 내에 있는지 확인하는 것입니다.커브 주위에 봉투 그리기
시각적 인 검사를 위해 첫 번째 곡선 (파란색) 주위에 봉투를 그립니다. 곡선은 단지 PointF
배열입니다. 파란색 곡선 주위에 올바른 엔벨로프를 그리는 방법을 모르는 순간부터, 실제 곡선의 X 점을 더하고 원래 곡선의 10 %를 뺀 두 개의 다른 곡선을 그립니다. 물론 이것은 나쁜 접근 방법이지만, 수직적 인 커브 구간에 있어서는 적어도 작동합니다.
여기
내가 봉투를 그릴 사용하고있는 코드입니다 : 아래 그림에서 볼 수하지만 즉시 곡선이 아닌 수직 단면에,이 트릭은 더 이상 작동하지 않습니다 :
public Bitmap DrawEnvelope(double[,] pinData, float vLimit, float iLimit)
{
g = Graphics.FromImage(box);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
PointF[] u = new PointF[pinData.GetLength(0)]; //Up line
PointF[] d = new PointF[pinData.GetLength(0)]; //Down Line
List<PointF> joinedCurves = new List<PointF>();
float posX = xMaxValue * (vLimit/100);
float minX = posX * -1;
for (int i = 0; i < pinData.GetLength(0); i++)
{
u[i] = new PointF(400 * (1 + (((float)pinData[i, 0]) + minX)/(xMaxValue + vExpand)), 400 * (1 - ((float)pinData[i, 1] * GetInvers((yMaxValue + iExpand)))));
}
for (int i = 0; i < pinData.GetLength(0); i++)
{
d[i] = new PointF(400 * (1 + (((float)pinData[i, 0]) + posX)/(xMaxValue + vExpand)), 400 * (1 - ((float)pinData[i, 1] * GetInvers((yMaxValue + iExpand)))));
}
Pen pengraph = new Pen(Color.FromArgb(50, 0 ,0 ,200), 1F);
pengraph.Alignment = PenAlignment.Center;
joinedCurves.AddRange(u);
joinedCurves.AddRange(d.Reverse());
PointF[] fillPoints = joinedCurves.ToArray();
SolidBrush fillBrush = new SolidBrush(Color.FromArgb(40, 0, 0, 250));
FillMode newFillMode = FillMode.Alternate;
g.FillClosedCurve(fillBrush, fillPoints, newFillMode, 0);
g.Dispose();
return box;
}
녹색 원이 자신에 의해 첨가하고, 그들은 제 곡선 (레드 하나) 잠재적 인 orginal 한 곡선에서의 차이보다 더 큰 10 %를 가지는 영역을 나타낸다.
누군가 나를 올바른 방법으로 넣는다면 좋을 것입니다. 원래 곡선 주위에 멋진 봉투를 채우려면 어떻게해야합니까?
UPDATE 나는 내가 지금까지이 질문에 주어진 답을 구현하는 방법을 찾을 수 없습니다 멍청한 놈, 그래서 somone에 친절하게 나에게이 문제에 대한이어야 코딩 방식을 표시 할 수 있는지 확인하기 위해 현상금을 넣어하고 있기 때문에.
봉투는 ± 10 % 영역을 의미합니까? 그렇다면, 당신이 필요로하는 첫 번째 일은 실제로 "10 % 이내"가 의미하는 바에 대한보다 명확한 것이라고 생각합니다. 각 전압에서 10 % 이내의 전류? 각 전류에서 10 % 이내의 전압? 다른 것? 이것이 학교/대학 과제에서 오는 것이라면, 실제 문구는 무엇입니까? 비즈니스 목적으로 수행하는 것이라면 기본 요구 사항은 무엇입니까? 그 것이 확실해지면 "봉투"가 어떻게 보이는지 훨씬 명확해질 것입니다. –
원본 커브를 다시 플롯 할 수없고 선 두께를 매우 크게하고 불투명도를 낮출 수 있습니까? – Dan
@Dan 나는 더 큰 펜으로 원래의 커브를 만들려고 이미 시도해 왔지만, 지금하는 것보다 결과가 더 나 빠진다는 것은 나쁜 생각입니다. –