如果在这条线段上,则选中这条线段 void MyGraphCal::selSeg(QPointF&pt) {
int num = lineSegs.size();
for(int i = 0; i < num; i++) {
LINESEG* oneLine = lineSegs.at(i);
LineSegment* oneLineDeg = oneLine->seg;
PointEx ptEx(pt.x(), pt.y());
PointEx np;//线段上的点
double dis = pToLinesegDist(ptEx, *oneLineDeg, np);
if(dis < 5 && dis >= 0.0) {
double l = relation(np, *oneLineDeg);
if(abs(l)< EP) {//起点
oneLine->bSelStartPt = true;
oneLine->bSelLine = false;
oneLine->bSelEndPt = false;
} else if(abs(l - 1.0) < EP) {//终点
oneLine->bSelEndPt = true;
oneLine->bSelLine = false;
oneLine->bSelStartPt = false;
} else if(l < 1 && l > 0) {//整条线
oneLine->bSelLine = true;
oneLine->bSelEndPt = false;
oneLine->bSelStartPt = false;
}
} else {
oneLine->bSelLine = false;
oneLine->bSelEndPt = false;
oneLine->bSelStartPt = false;
}
}
} 四、向量 以上计算过程中用到了向量和向量的点积 向量的几何意义:一条有方向的线段 这就是上面定义的线段的来源,定义一点线段要定一它的起始点和终止点,从起始点到终止点的方向就是向量的方向。 点积的结合意义:向量a、b,r = a*b=|a|*|b|cosα。也就是:向量a的模乘以向量b在向量a上的投影的长度。 因为α是一个角度,所以可以通过结果r的正负获取两条线段之间的简单关系: r>0:两个向量之间的夹角在0-90度之间 r=0:两个向量互相垂直 r |