线段与矩形相交计算(QT方法)
不想加载geos库,故使用qt的方法,计算出矩形与线段的交集。
QLineF clipLine(QLineF line, QRectF box) { QRectF lineBox(line.p1(), line.p2()); if (!box.intersects(lineBox)) { return line; } bool b0 = box.contains(line.p1()); bool b1 = box.contains(line.p2()); if (b0 && b1) { return line; } else { QLineF line1(box.topLeft(), box.topRight()); QLineF line2(box.topRight(), box.bottomRight()); QLineF line3(box.bottomLeft(), box.bottomRight()); QLineF line4(box.topLeft(), box.bottomLeft()); QPointF pt1, pt2, pt3, pt4; bool bi1 = QLineF::BoundedIntersection == line.intersect(line1, &pt1); bool bi2 = QLineF::BoundedIntersection == line.intersect(line2, &pt2); bool bi3 = QLineF::BoundedIntersection == line.intersect(line3, &pt3); bool bi4 = QLineF::BoundedIntersection == line.intersect(line4, &pt4); if (b0) { if (bi1) return QLineF(line.p1(), pt1); if (bi2) return QLineF(line.p1(), pt2); if (bi3) return QLineF(line.p1(), pt3); if (bi4) return QLineF(line.p1(), pt4); } else if (b1) { if (bi1) return QLineF(line.p2(), pt1); if (bi2) return QLineF(line.p2(), pt2); if (bi3) return QLineF(line.p2(), pt3); if (bi4) return QLineF(line.p2(), pt4); } else { QPolygonF pts; if (bi1) pts.append(pt1); if (bi2) pts.append(pt2); if (bi3) pts.append(pt3); if (bi4) pts.append(pt4); return QLineF(pts.first(), pts.last()); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人