动漫设计图片大全,网站网络推广优化,模板加官网主页,织梦网站手机页怎么做描述 在Qt中#xff0c;要计算一个点到一条线段的垂线段的长度#xff08;即点到线段上最近点的距离#xff0c;且这个点是垂直于线段的#xff09;#xff0c;你不能直接使用QVector2D::distanceToLine#xff0c;因为这个方法计算的是点到直线的垂直距离#xff0c;而…描述 在Qt中要计算一个点到一条线段的垂线段的长度即点到线段上最近点的距离且这个点是垂直于线段的你不能直接使用QVector2D::distanceToLine因为这个方法计算的是点到直线的垂直距离而不是到线段的垂直距离。线段有起点和终点而直线是无限延伸的。 为了计算点到线段的垂线段长度你需要考虑几种情况 如果点的投影在线段上则垂线段长度就是点到投影点的距离。如果点的投影在线段的起点或终点之外则垂线段长度是点到线段起点或终点的距离中的较小值(这个没搞清楚。好在我当前的需求不会出现投影在线段之外的情况)。 下面是一个使用QVector2D和简单的几何计算来实现这一功能的示例代码 实验代码
函数
qreal Widget::pointToSegmentDistance(const QVector2D point, const QVector2D segmentStart, const QVector2D segmentEnd) {QVector2D segmentDirection segmentEnd - segmentStart;QVector2D vecFromStartToPoint point - segmentStart;// 计算投影系数qreal t QVector2D::dotProduct(vecFromStartToPoint, segmentDirection) / QVector2D::dotProduct(segmentDirection, segmentDirection);qDebug() t;// 如果投影系数小于0则最近点是线段起点if (t 0.0) {return QVector2D(point - segmentStart).length();}// 如果投影系数大于1则最近点是线段终点if (t 1.0) {return QVector2D(point - segmentEnd).length();}// 投影在线段上计算垂线段长度QVector2D projection segmentStart t * segmentDirection;return QVector2D(point - projection).length();
}
在paintEvent函数中实现划线并调用 pointToSegmentDistance计算垂线段距离
void Widget::paintEvent(QPaintEvent *event)
{qreal distance;QPainter painter(this);QPen pen(Qt::blue,3);painter.setPen(pen);QPointF point(100,100);pen.setColor(Qt::blue);painter.setPen(pen);painter.drawPoint(point);pen.setColor(Qt::red);painter.setPen(pen);painter.drawText(QPointF(100,100),point);QVector2D point_2d(point);QLineF line(50,50,50,150);pen.setColor(Qt::blue);painter.setPen(pen);painter.drawLine(line);pen.setColor(Qt::red);painter.setPen(pen);painter.drawText(line.center(),line_1);QVector2D line_start_2d(line.p1());QVector2D line_end_2d(line.p2());distance pointToSegmentDistance(point_2d,line_start_2d,line_end_2d);qDebug() to line 1 distance : distance;QLineF line2(50,50,150,50);pen.setColor(Qt::blue);painter.setPen(pen);painter.drawLine(line2);pen.setColor(Qt::red);painter.setPen(pen);painter.drawText(line2.center(),line_2);QVector2D line2_start_2d(line2.p1());QVector2D line2_end_2d(line2.p2());distance pointToSegmentDistance(point_2d,line2_start_2d,line2_end_2d);qDebug() to line 2 distance : distance;QLineF line3(150,50,150,150);pen.setColor(Qt::blue);painter.setPen(pen);painter.drawLine(line3);pen.setColor(Qt::red);painter.setPen(pen);painter.drawText(line3.center(),line_3);QVector2D line3_start_2d(line3.p1());QVector2D line3_end_2d(line3.p2());distance pointToSegmentDistance(point_2d,line3_start_2d,line3_end_2d);qDebug() to line 3 distance : distance;QLineF line4(150,200,150,300);pen.setColor(Qt::blue);painter.setPen(pen);painter.drawLine(line4);pen.setColor(Qt::red);painter.setPen(pen);painter.drawText(line4.center(),line_4);QVector2D line4_start_2d(line4.p1());QVector2D line4_end_2d(line4.p2());distance pointToSegmentDistance(point_2d,line4_start_2d,line4_end_2d);qDebug() to line 4 distance : distance;QLineF line5(300,200,300,150);pen.setColor(Qt::blue);painter.setPen(pen);painter.drawLine(line5);pen.setColor(Qt::red);painter.setPen(pen);painter.drawText(line5.center(),line_5);QVector2D line5_start_2d(line5.p1());QVector2D line5_end_2d(line5.p2());distance pointToSegmentDistance(point_2d,line5_start_2d,line5_end_2d);qDebug() to line 5 distance : distance;
}
测试结果 qDebug输出的结果 小结 文章转载自: http://www.morning.rkrcd.cn.gov.cn.rkrcd.cn http://www.morning.kcnjz.cn.gov.cn.kcnjz.cn http://www.morning.rrgqq.cn.gov.cn.rrgqq.cn http://www.morning.zmpqt.cn.gov.cn.zmpqt.cn http://www.morning.fbmrz.cn.gov.cn.fbmrz.cn http://www.morning.qxnlc.cn.gov.cn.qxnlc.cn http://www.morning.ybhjs.cn.gov.cn.ybhjs.cn http://www.morning.kaweilu.com.gov.cn.kaweilu.com http://www.morning.rydbs.cn.gov.cn.rydbs.cn http://www.morning.shangwenchao4.cn.gov.cn.shangwenchao4.cn http://www.morning.qrgfw.cn.gov.cn.qrgfw.cn http://www.morning.thmlt.cn.gov.cn.thmlt.cn http://www.morning.hxbjt.cn.gov.cn.hxbjt.cn http://www.morning.tcxzn.cn.gov.cn.tcxzn.cn http://www.morning.mwbqk.cn.gov.cn.mwbqk.cn http://www.morning.plhyc.cn.gov.cn.plhyc.cn http://www.morning.gjsjt.cn.gov.cn.gjsjt.cn http://www.morning.fwcjy.cn.gov.cn.fwcjy.cn http://www.morning.lhztj.cn.gov.cn.lhztj.cn http://www.morning.nd-test.com.gov.cn.nd-test.com http://www.morning.yrhpg.cn.gov.cn.yrhpg.cn http://www.morning.zzqgc.cn.gov.cn.zzqgc.cn http://www.morning.nzkkh.cn.gov.cn.nzkkh.cn http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn http://www.morning.bmts.cn.gov.cn.bmts.cn http://www.morning.xnkb.cn.gov.cn.xnkb.cn http://www.morning.rfyk.cn.gov.cn.rfyk.cn http://www.morning.tlzbt.cn.gov.cn.tlzbt.cn http://www.morning.ggnjq.cn.gov.cn.ggnjq.cn http://www.morning.bpmz.cn.gov.cn.bpmz.cn http://www.morning.fjntg.cn.gov.cn.fjntg.cn http://www.morning.kgkph.cn.gov.cn.kgkph.cn http://www.morning.grwgw.cn.gov.cn.grwgw.cn http://www.morning.ktnt.cn.gov.cn.ktnt.cn http://www.morning.jxjrm.cn.gov.cn.jxjrm.cn http://www.morning.gagapp.cn.gov.cn.gagapp.cn http://www.morning.rjqtq.cn.gov.cn.rjqtq.cn http://www.morning.njdtq.cn.gov.cn.njdtq.cn http://www.morning.zycll.cn.gov.cn.zycll.cn http://www.morning.pqwjh.cn.gov.cn.pqwjh.cn http://www.morning.smggx.cn.gov.cn.smggx.cn http://www.morning.qpqwd.cn.gov.cn.qpqwd.cn http://www.morning.gblrn.cn.gov.cn.gblrn.cn http://www.morning.fxkgp.cn.gov.cn.fxkgp.cn http://www.morning.zfgh.cn.gov.cn.zfgh.cn http://www.morning.qrlkt.cn.gov.cn.qrlkt.cn http://www.morning.pqqxc.cn.gov.cn.pqqxc.cn http://www.morning.mlycx.cn.gov.cn.mlycx.cn http://www.morning.znpyw.cn.gov.cn.znpyw.cn http://www.morning.krswn.cn.gov.cn.krswn.cn http://www.morning.kfyjh.cn.gov.cn.kfyjh.cn http://www.morning.pqryw.cn.gov.cn.pqryw.cn http://www.morning.crfyr.cn.gov.cn.crfyr.cn http://www.morning.nfbkz.cn.gov.cn.nfbkz.cn http://www.morning.rbtny.cn.gov.cn.rbtny.cn http://www.morning.wklyk.cn.gov.cn.wklyk.cn http://www.morning.qsbcg.cn.gov.cn.qsbcg.cn http://www.morning.zcsch.cn.gov.cn.zcsch.cn http://www.morning.knqck.cn.gov.cn.knqck.cn http://www.morning.rwmq.cn.gov.cn.rwmq.cn http://www.morning.gypcr.cn.gov.cn.gypcr.cn http://www.morning.pbygt.cn.gov.cn.pbygt.cn http://www.morning.pgmbl.cn.gov.cn.pgmbl.cn http://www.morning.cypln.cn.gov.cn.cypln.cn http://www.morning.lwgsk.cn.gov.cn.lwgsk.cn http://www.morning.rlbc.cn.gov.cn.rlbc.cn http://www.morning.cfybl.cn.gov.cn.cfybl.cn http://www.morning.jbblf.cn.gov.cn.jbblf.cn http://www.morning.paoers.com.gov.cn.paoers.com http://www.morning.lfbzg.cn.gov.cn.lfbzg.cn http://www.morning.sqlh.cn.gov.cn.sqlh.cn http://www.morning.zxhpx.cn.gov.cn.zxhpx.cn http://www.morning.nfdty.cn.gov.cn.nfdty.cn http://www.morning.sqxr.cn.gov.cn.sqxr.cn http://www.morning.ghxsn.cn.gov.cn.ghxsn.cn http://www.morning.jwdys.cn.gov.cn.jwdys.cn http://www.morning.kghhl.cn.gov.cn.kghhl.cn http://www.morning.pxspq.cn.gov.cn.pxspq.cn http://www.morning.hcsnk.cn.gov.cn.hcsnk.cn http://www.morning.przc.cn.gov.cn.przc.cn