//由三点计算圆弧的参数://const QRect & rectangle, int startAngle, int spanAngle//圆弧的包围框(左上角坐标、宽、高),起始角度、旋转角度double radius, x0, y0, startAngle, spanAngle;double x1 = dataList.at(0)->x, x2 = dataList.at(1)->x, x3 = dataList.at(2)->x;double y1 = dataList.at(0)->y, y2 = dataList.at(1)->y, y3 = dataList.at(2)->y;double a = x1 - x2;double b = y1 - y2;double c = x1 - x3;double d = y1 - y3;double e = ((x1 * x1 - x2 * x2) + (y1 * y1 - y2 * y2)) / 2.0;double f = ((x1 * x1 - x3 * x3) + (y1 * y1 - y3 * y3)) / 2.0;double det = b * c - a * d;if ((x1 == x2 && x1 == x3) || (y1 == y2 && y1 == y3)){return;      //三点一线}x0 = (b * f - d * e) / det;y0 = (c * e - a * f) / det;radius = hypot(x1 - x0, y1 - y0);//计算三点的对应的角度double angle1 = acos((x1 - x0) / (hypot((x1 - x0), (y1 - y0))));double angle2 = acos((x2 - x0) / (hypot((x2 - x0), (y2 - y0))));double angle3 = acos((x3 - x0) / (hypot((x3 - x0), (y3 - y0))));if (y1 - y0 < 0)angle1 = 2 * PI - angle1;  //点1在第三、四象限if (y2 - y0 < 0)angle2 = 2 * PI - angle2; //点2在第三、四象限if (y3 - y0 < 0)angle3 = 2 * PI - angle3; //点3在第三、四象限//上面计算的角度是基于QGraphicsView中的坐标,需要进行转换为数学坐标中的角度angle1 = 360 - angle1 * 180 / PI;angle2 = 360 - angle2 * 180 / PI;angle3 = 360 - angle3 * 180 / PI;//设置绘制方向startAngle = angle1;spanAngle = angle3 - angle1;if (!data->m_arcDirection)       //顺时针(负值){if (spanAngle > 0)spanAngle = spanAngle - 360;}else                           //逆时针(正值){if (spanAngle < 0)spanAngle = spanAngle + 360;}//m_angle圆弧在圆上的起点角度,m_spanAngle圆弧的角度double arcRecX = x0 - radius;double arcRecY = y0 - radius;double arcRecW = 2 * radius;double arcRecH = 2 * radius;double arcStartPhi = startAngle;double arcSpanPhi = spanAngle;QRect rec;rec.setX(arcRecX );rec.setY(arcRecY );rec.setWidth(arcRecW );rec.setHeight(arcRecH );painters.drawArc(rec, 16 * arcStartPhi, 16 * arcSpanPhi);  //QT绘制单位就是1/16度,需进行换算 

Qt使用三点坐标画圆弧相关推荐

  1. html根据坐标画圆,Canvas三种动态画圆实现方法说明(小结)

    前言 canvas是HTML5出来的绘图API容器,对于图形的处理非常强大,下面使用canvas配合JavaScript来做一下动态画圆效果.可以用它来做圆形进度条来使用. 这里我个人总结了3种实现方 ...

  2. cad两直线相交画圆弧_CAD两直线,如何用圆弧连接?

    回答: CAD圆弧连接.连续圆弧怎么画 使用CIRCLE命令绘制圆时,默认的画圆方法是指定圆心和半径,此外,还可通过两点或三点来画圆.CIRCLE命令也可用来绘制过渡圆弧,方法是先画出与已有对象相切的 ...

  3. cad两直线相交画圆弧,CAD 两直线,怎么用圆弧连接?

    回答: CAD圆弧连接.连续圆弧怎么画 使用CIRCLE命令绘制圆时,默认的画圆方法是指定圆心和半径,此外,还可通过两点或三点来画圆.CIRCLE命令也可用来绘制过渡圆弧,方法是先画出与已有对象相切的 ...

  4. 圆弧的函数c语言,VC++中Arc函数画圆弧

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:VC++中Arc函数画圆弧回答:BOOL Arc(int x1,int y1,int x2,int y2,int x3,int y3 ...

  5. 用三次贝塞尔曲线拟合圆弧

    由于工作需求,需要用三次贝塞尔曲线拟合圆弧,所以查阅了一些资料,主要参考如下文章: 使用贝塞尔曲线拟合圆 但是文章写的过于简单,也没有推演步骤,而我需要知道任意圆弧如何求出贝塞尔曲线的两个控制点,所以 ...

  6. C# 已知圆心和两点,用DrawArc()画圆弧(算法)

    (本文转载自)http://www.cnblogs.com/stalwart/archive/2010/12/06/1897636.html 如题,已经知道圆心和两点,画出两点间的圆弧,思路,先分别求 ...

  7. WPF 自实现Arc控件和Pie控件(根据起止角度画圆弧或扇形)

    WPF虽然提供了丰富的图形控件,以及用起来爽到爆的路径标记语法,但唯一让广大支持者不满的是,为啥没有独立绘制圆弧和扇形的工具.虽说路径标记语法可以画圆弧,也可以封闭一个扇形区域,但毕竟对起点和终点的把 ...

  8. 深入理解UIBezierPath画圆弧addArcWithCenter

    UIBezierPath画圆弧的方法 - (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFlo ...

  9. html 物理引擎,在物理引擎中画圆弧

    本文作者:IMWeb zzbozheng 未经同意,禁止转载 因为需求的需要,要使用在物理引擎中使用四分之一圆弧,我们来看看怎么实现在物理引擎中画出四分之一的圆弧, 在物理引擎中绘制圆弧 一般来说,物 ...

最新文章

  1. Git 高频命令、版本回退、分支操作、文件修改删除、撤销、标签、远程仓库推送、拉取
  2. python3 requirements使用方法 ~= >= <
  3. 解决Windows下栈内存过小的问题
  4. php中echo js代码,JS有没类似PHP的echo效果?
  5. 武汉大学提出全球最大的口罩遮挡人脸数据集(附下载地址):RMFD
  6. 第三次学JAVA再学不好就吃翔(part56)--StringBuffer的替换反转和截取功能
  7. LeetCode 1219. 黄金矿工(回溯)
  8. 学UI设计就业难吗?
  9. RMAN数据库恢复 之归档模式有(无)备份-丢失数据文件的恢复
  10. JavaScript 01
  11. MVVM 架构解析及 Jetpack 架构组件的使用
  12. 黑马vue实战项目-(一)项目初始化登录功能开发
  13. C# list删除 另外list里面的元素_Redis#list列表(二)
  14. C++ Qt高级开发视频教程
  15. DevCpp 如何进行调试
  16. Python从入门到PY交易,基础语法,散记(一)
  17. 案例分析: 全球顶尖的物流公司Schenker采用SAPERION
  18. npmnjs学习笔记-moddle description编写规则
  19. 63套js ,html .css效果页面(点个小星星免费下载)
  20. 标志logo设计/欣赏

热门文章

  1. 记忆中永不消逝的香椿芽儿的香味·《晚唱·贾平凹》
  2. Redis Essentials 读书笔记 - 第一章: Getting Started (The Baby Steps)
  3. nnie学习一、生成wk文件
  4. Python 爬虫教学网站
  5. 大数据量下水晶报表的实现及显示过程中的进度条显示讨论
  6. mysql 查看所有的函数_mysql查看所有存储过程,函数,视图,触发器,表
  7. 香港空间的确很坑,网站可用性只有72.37%
  8. 微信公众平台开发 上传下载多媒体文件
  9. linux命令:find、打包解包、vi编辑器、用户权限
  10. JavaCV入门指南:调用opencv原生API和JavaCV是如何封装了opencv的图像处理操作?