Поиск разницы двух графиков в C #

У меня есть приложение для лазерного сканера, в котором я хочу найти разницу между двумя графиками: один - эталонный график без объекта, а другой - с объектом в поле зрения. Я рисую график с координатами x y. в настоящее время я построил графики и заполнил их разными цветами, чтобы четко видеть вычтенную часть. Но теперь я хочу, чтобы отображалась только область разницы ... Я думал, что поиск области под кривой решит проблему, но я думаю, что это даст только числовое значение, а не точное положение вычтенной области.

Итак, я поискал в Интернете решения на C #, где я могу сделать это в самом сюжете. Надеюсь, я ясно выразился. Может ли кто-нибудь направить меня в поиске? Я даю здесь свой код на C # ..

// PointPairList holds the data for plotting, X and Y arrays (one can use other types of objects as well)

        PointPairList spl1 = new PointPairList(x1, y1);
        PointPairList spl2 = new PointPairList(x2, y2);
        PointPairList spl3 = new PointPairList(x, y);



// Add curves to myPane object
      LineItem myCurve1 = myPane.AddCurve("LIDAR Data Scanner-Measurement-Normal", spl1, Color.Blue, SymbolType.None);
      LineItem myCurve2 = myPane.AddCurve("LIDAR Data Scanner-Measurement-with object", spl2, Color.Red, SymbolType.None);
      LineItem myCurve3 = myPane.AddCurve("LIDAR Data Scanner-Measurement-Subtracted curve", spl3, Color.Green, SymbolType.None);

    //   myCurve1.Line.Width = 3.0F;
    //myCurve2.Line.Width = 3.0F;
    myCurve1.Line.Fill = new Fill(Color.White, Color.FromArgb(16, 155, 0, 0), 90F);
    myCurve2.Line.Fill = new Fill(Color.Black, Color.FromArgb(143, 55, 6, 0), 90F);

Я хочу отобразить на рисунке только белую часть прямоугольника ...

введите описание изображения здесь


person ShivShambo    schedule 22.03.2012    source источник
comment
Зачем отмечать это как C ++ и C #, когда вы говорите только о C #?   -  person Aleks    schedule 22.03.2012
comment
@Aleks, если это возможно в c ++, я могу сделать это и там ..   -  person ShivShambo    schedule 22.03.2012
comment
Какую кривую вы хотите получить? Вычтенная кривая вроде этой? ars.sciencedirect.com/content/image/   -  person Dmitry Reznik    schedule 22.03.2012
comment
@DmitriyReznik Спасибо за предложение. Я добавил график в свой вопрос. синяя кривая - справочная .. красная точно перекрывается, за исключением положения объекта.   -  person ShivShambo    schedule 22.03.2012


Ответы (1)


Я не уверен в структурах данных, которые вы заметили, но, вообще говоря, если вы имеете дело с многоугольниками (замкнутые кривые задаются набором точек x, y), вы можете выполнить обрезку многоугольника, чтобы найти разницу. Видеть

Алгоритм вычисления оставшегося многоугольника после вычитания
Как пересечь два многоугольника?

Если вы можете представить свои два графика, то есть контрольный график и предоставленный график в виде многоугольника, то приведенный выше алгоритм должен позволить вам вычислить разницу.

person VinayC    schedule 22.03.2012
comment
Я пробовал алгоритм GPC. Но это только для целых чисел. Но у меня двойные ценности .. - person ShivShambo; 28.03.2012
comment
@lakshmikant, GPC может использовать целочисленные координаты, но преобразовать системы координат не так уж и сложно. Если вы знаете диапазон и точность своих значений, тогда преобразование их в целые числа или из них не вызывает затруднений. Например, ваши удвоения находятся в диапазоне от 0 до 10 с 5 цифрами после десятичной дроби, умножение на 100000 должно дать вам целочисленные значения - множитель может быть другим для x, y - то же самое, что и при преобразовании int обратно в double. - person VinayC; 28.03.2012