###### tags: `QT`
# ImageProcessThread red line
```cpp=
float PI = 3.14;
```
```cpp=
float ImageProcThread::angle(QLineF pl)
{
Point p1(pl.x1(), pl.y1());
Point p2(pl.x2(), pl.y2());
float angle_temp;
float xx, yy;
xx = pl.x2() - pl.x1();
yy = pl.y2() - pl.y1();
if (xx == 0.0)
angle_temp = PI / 2.0;
else
angle_temp = atan(fabs(yy / xx));
if ((xx < 0.0) && (yy >= 0.0))
angle_temp = PI - angle_temp;
else if ((xx < 0.0) && (yy < 0.0))
angle_temp = PI + angle_temp;
else if ((xx >= 0.0) && (yy < 0.0))
angle_temp = PI * 2.0 - angle_temp;
return (angle_temp);
}
```
```cpp=
bool ImageProcThread::isInCapture(Rect_<float> lpRoi, QLineF pl, int pix)
{
// https://jensen-lee.blog.csdn.net/article/details/88718170
Point p0(lpRoi.x+lpRoi.width/2, lpRoi.y+lpRoi.height/2);
Point p1(pl.x1(), pl.y1());
Point p2(pl.x2(), pl.y2());
float p_angle = angle(pl);
// qDebug() << pl.x1() << pl.y1() << pl.x2() << pl.y2();
// qDebug() << p_angle;
double d_y = pix * sin(p_angle);
double d_x = pix * cos(p_angle);
//外接4個點
Point new_point1(pl.x1() + d_y, pl.y1() - d_x);
Point new_point2(pl.x2() + d_y, pl.y2() - d_x);
Point new_point3(pl.x2() - d_y, pl.y2() + d_x);
Point new_point4(pl.x1() - d_y, pl.y1() + d_x);
// 12, 23. 34, 41向量
Point new_point12(new_point2.x - new_point1.x, new_point2.y - new_point1.y);
Point new_point23(new_point3.x - new_point2.x, new_point3.y - new_point2.y);
Point new_point34(new_point4.x - new_point3.x, new_point4.y - new_point3.y);
Point new_point41(new_point1.x - new_point4.x, new_point1.y - new_point4.y);
//inside point 10, 20, 30, 40向量
Point new_point10(p0.x - new_point1.x, p0.y - new_point1.y);
Point new_point20(p0.x - new_point2.x, p0.y - new_point2.y);
Point new_point30(p0.x - new_point3.x, p0.y - new_point3.y);
Point new_point40(p0.x - new_point4.x, p0.y - new_point4.y);
// double tmp = (double)(p2.y-p1.y)/(double)(p2.x-p1.x);
// int p_mid = tmp*(p0.x-p1.x)+p1.y; // 點在兩點之間的y座標
// 在detection Line範圍內
// if(((p_mid + pix) > p0.y) && ((p_mid - pix) < p0.y))
// return true;
// else return false;
// if(area(p0, new_point1, new_point2) + area(p0, new_point2, new_point3) + area(p0, new_point3, new_point4) <= \
// area(new_point1, new_point2, new_point3) + area(new_point1, new_point4, new_point3))
// {
// return true;
// }
// else return false;
// AB × AM>0; BC × BM>0; CD × CM>0; DA × DM>0
int AB_AM = new_point12.x * new_point10.y - new_point12.y * new_point10.x;
int BC_BM = new_point23.x * new_point20.y - new_point23.y * new_point20.x;
int CD_CM = new_point34.x * new_point30.y - new_point34.y * new_point30.x;
int DA_DM = new_point41.x * new_point40.y - new_point41.y * new_point40.x;
if(AB_AM > 0 && BC_BM > 0 && CD_CM > 0 && DA_DM > 0)
{
return true;
}
else return false;
}
```
```cpp=
isInCapture(lp.roi, detectionLine->getLine(), pixelRange))
```