Странные узоры после рисования отраженного объекта

Скриншот

Эй, я хотел бы отразить треугольник над линией симметрии, параллельной одной из сторон, используя только точечные координаты и Mat::at() в OpenCV. Поэтому я просто отражаю Point2d P над линией, состоящей из вершин треугольника P1,P2.

Проблема в том, что я получаю некоторые странные паттерны и не могу от них избавиться. Я использовал удвоения для повышения точности, но это не помогло.

Есть идеи?

if(P1.x-P2.x) //P1P2 is not vertical
                        {
                            double a=((P2.y-P1.y)/static_cast<double>(P2.x-P1.x));
                            double b=P1.y-a*P1.x;    //symmetry line y=ax+b
                            double a1=0,b1=0;
                            if(a)
                            {
                                a1=-1/a; // y=a1x+b1 perpendicular to y=ax+b
                                b1=P.y-a1*P.x;
                                double xc=(b1-b)/(a-a1); // ax+b=a1x+b1
                                P.x= 2*xc-P.x;
                                P.y=a1*P.x+b1;
                            }
                            else    //P1P2 is horizontal
                            {
                                P.y=2.0*P1.y-P.y;

                            }
                        }
                        else  //P1P2 is vertical
                        {

                            P.x=2*P1.x-P.x;
                        }

0 ответов

Другие вопросы по тегам