您的位置:首页 > 其它

数字图像处理程序总结

2015-06-05 11:02 197 查看
项目介绍:该项目,类似于Photoshop,CAD等专业制图软件(当然,功能没他们那么强大),该软件,主要是工业的图像处理。

项目接近尾声了,主要关键算法、思路如下:

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/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: