数字图像处理程序总结
2015-06-05 11:02
197 查看
项目介绍:该项目,类似于Photoshop,CAD等专业制图软件(当然,功能没他们那么强大),该软件,主要是工业的图像处理。
项目接近尾声了,主要关键算法、思路如下:
1.鼠标点到最近图的距离——判断选中线段,
2.鼠标点是否在多边形凸形图的内——判断选中多边形
3.计算机中,角度的旋转计算,sin(PI*角度/180),cos(PI*角度/180)的相关计算
4.设计模式、架构——很重要。这里用到了适配器模式,三层等
5.精度问题,无论什么语言,计算机处理小数的问题,精度不是很准确,不同的语言,我想应该处理的方式不同。我使用的是C来写后台,C#写界面和逻辑部分
6.屏幕、界面、打印机之间的分辨率转换,以及英寸、毫米、分辨率的转换
7.对象的序列化、反序列化。
项目简图:
点到线段的距离
判断点是否在多边形内部
点的旋转公式
项目接近尾声了,主要关键算法、思路如下:
1.鼠标点到最近图的距离——判断选中线段,
2.鼠标点是否在多边形凸形图的内——判断选中多边形
3.计算机中,角度的旋转计算,sin(PI*角度/180),cos(PI*角度/180)的相关计算
4.设计模式、架构——很重要。这里用到了适配器模式,三层等
5.精度问题,无论什么语言,计算机处理小数的问题,精度不是很准确,不同的语言,我想应该处理的方式不同。我使用的是C来写后台,C#写界面和逻辑部分
6.屏幕、界面、打印机之间的分辨率转换,以及英寸、毫米、分辨率的转换
7.对象的序列化、反序列化。
项目简图:
/// 点到线段的距离(像素) /// </summary> public static double PointLine_Disp(double xx, double yy, double x1, double y1, double x2, double y2) { double a, b, c, ang1, ang2, ang, m; double result = 0; //分别计算三条边的长度 a = Math.Sqrt((x1 - xx) * (x1 - xx) + (y1 - yy) * (y1 - yy))); if (a == 0) return -1; b = Math.Sqrt((x2 - xx) * (x2 - xx) + (y2 - yy) * (y2 - yy))); if (b == 0) return -1; c = Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))); //如果线段是一个点则退出函数并返回距离 if (c == 0) { result = a; return result; } //如果点(xx,yy到点x1,y1)这条边短 if (a < b) { //如果直线段AB是水平线。得到直线段AB的弧度 if (y1 == y2) { if (x1 < x2) ang1 = 0; else ang1 = Math.PI; } else { m = (x2 - x1) / c; if (m - 1 > 0.00001) m = 1; ang1 = Math.Acos(m); if (y1 > y2) ang1 = Math.PI * 2 - ang1;//直线(x1,y1)-(x2,y2)与折X轴正向夹角的弧度 } m = (xx - x1) / a; if (m - 1 > 0.00001) m = 1; ang2 = Math.Acos(m); if (y1 > yy) ang2 = Math.PI * 2 - ang2;//直线(x1,y1)-(xx,yy)与折X轴正向夹角的弧度 ang = ang2 - ang1; if (ang < 0) ang = -ang; if (ang > Math.PI) ang = Math.PI * 2 - ang; //如果是钝角则直接返回距离 if (ang >Math.PI / 2) return a; else return a * Math.Sin(ang); } else//如果(xx,yy)到点(x2,y2)这条边较短 { //如果两个点的纵坐标相同,则直接得到直线斜率的弧度 if (y1 == y2) if (x1 < x2) ang1 = Math.PI; else ang1 = 0; else { m = (x1 - x2) / c; if (m - 1 > 0.00001) m = 1; ang1 = Math.Acos(m); if (y2 > y1) ang1 = Math.PI * 2 - ang1; } m = (xx - x2) / b; if (m - 1 > 0.00001) m = 1; ang2 = Math.Acos(m);//直线(x2-x1)-(xx,yy)斜率的弧度 if (y2 > yy) ang2 = Math.PI * 2 - ang2; ang =ang2 - ang1; if (ang < 0) ang = -ang; if (ang > Math.PI) ang = Math.PI * 2 - ang;//交角的大小 //如果是对角则直接返回距离 if (ang > Math.PI / 2) return b; else return b * Math.Sin(ang);//如果是锐角,返回计算得到的距离 } }
点到线段的距离
判断点是否在多边形内部
点的旋转公式
作者:orange1438 出处:http://www.cnblogs.com/orange1438/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章推荐
- every day english
- 报错:Didn't find class "**Activity" on path: DexPathList[dexElements=[****]
- Activity 生命周期详解
- Nginx+Tomcat负载均衡配置
- MAC下快速查看 资源库 文件
- Tomcat启动时,报java.io.EOFException异常
- 黑马程序员——Java基础—网络编程
- JMockit 如何 mock 异常
- ISE更改内置的编辑器
- 【回文】leetcode - Shortest Palindrome
- linux常用操作命令
- angularjs directive design made easy
- 浏览器页面是否缩放问题。
- jQuery 语法(一)
- 操作系统-进程管理-进程概要
- SOUI开发者论坛
- 博客地址更换http://my.oschina.net/conniewu
- centos 设置防火墙(记录)
- 圆形进度条的实现方法
- sqlserver导出 数据字典的SQL语句