Cześć. Chcę wykorzystać OpenCV do jednego z moich projektów. Potrzebuję zdobyć informacje o kącie między dwoma odcinkami. Naskrobałem kod, ale czy wedłóg was jest prawidłowy i sensowny ? Niby wyniki dostaje w przybliżeniu dobre:
double LogicalLine::AngleBetweanEachNeightbour(char sideOfNeightbour, int indexOfNeightbour)
{
std::vector<LogicalLine*> tempNeightbours;
if(sideOfNeightbour == 'A')
tempNeightbours = this->linesNearA;
else if(sideOfNeightbour == 'B')
tempNeightbours = this->linesNearB;
LogicalLine* l = tempNeightbours[indexOfNeightbour];
Point vectorOfOwner;
if(A.x > B.x)
{
vectorOfOwner.x = A.x - B.x;
vectorOfOwner.y = A.y - B.y;
}else
{
vectorOfOwner.x = B.x - A.x;
vectorOfOwner.y = B.y - A.y;
}
Point vectorOfNeightbour;
if(l->A.x > l->B.x)
{
vectorOfNeightbour.x = l->A.x - l->B.x;
vectorOfNeightbour.y = l->A.y - l->B.y;
}else
{
vectorOfNeightbour.x = l->B.x - l->A.x;
vectorOfNeightbour.y = l->B.y - l->A.y;
}
double degreesOwner = std::atan2(vectorOfOwner.y, vectorOfOwner.x) * 180 / M_PI;
if (degreesOwner > 90)
{
degreesOwner = 450 - degreesOwner;
}
else
{
degreesOwner = 90 - degreesOwner;
}
double degreesNeightbour = std::atan2(vectorOfNeightbour.y, vectorOfNeightbour.x)* 180 / M_PI;
if (degreesNeightbour > 90)
{
degreesNeightbour = 450 - degreesNeightbour;
}
else
{
degreesNeightbour = 90 - degreesNeightbour;
}
return abs(degreesNeightbour - degreesOwner);
}
Jak widzimy, jest to metoda klasy LogicalLine, która winna liczyć kąt między mną (tą linią) a jej wybranym sąsiadem. Przyznam się, że musiałem sobie odświeżyć wiedzę z geometrii, jednak chciałbym zasięgnąć jeszcze czyjejś opini - może można to policzyć prościej ??
Z góry dzięki za zainteresowanie.