文章分类 -  算法

强大的算法是软件的核心
推导坐标旋转公式(转)
摘要:在《Flash actionScript 3.0 动画教程》一书中有一个旋转公式:x1=cos(angle)*x-sin(angle)*y;y1=cos(angle)*y+sin(angle)*x;其中x,y表示物体相对于旋转点旋转angle的角度之前的坐标,x1,y1表示物体旋转angle后相对于... 阅读全文
posted @ 2015-09-02 15:57 carekee 阅读(672) 评论(0) 推荐(0) 编辑
日历查询的算法 如何计算某一天是星期几
摘要:历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式,其中最著名的是蔡勒(Zeller)公式如何计算某一天是星期几? —— 蔡勒(Zeller)公式 历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是... 阅读全文
posted @ 2015-05-26 09:28 carekee 阅读(8251) 评论(1) 推荐(0) 编辑
判断一个点是否在给定的凸四边形内
摘要:方法一:如果一个点在这个凸四边形内,那么按照顺时针方向,该点一定在每条边的右侧。可使用矢量叉积来看:该方法只适用于凸多边形。矢量叉积: 计算矢量叉积是与直线和线段相关算法的核心部分。设矢量P=(x1,y1),Q=(x2,y2),则矢量叉积定义为由(0,0)、p1、p2和p1+p2所组成的平行四边形... 阅读全文
posted @ 2014-05-16 11:03 carekee 阅读(7880) 评论(0) 推荐(0) 编辑
Kahan's Summation Formula
摘要:做项目终于遇到精度产生的问题了,由于免费的CULA库只能用float精度,所以程序里有些数组是float的,然后在做累加运算的时候问题就出来了——计算小节点系统就收敛,大节点系统发散,明显是精度问题。于是研究了一下Kahan 求和公式,这货果然厉害,能将累加的精度保持在float级别。以下是我用VC写的演示程序:#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){int i;float x=0.001;float y;float t;float sum;float eps=0;printf("\n理论值: 阅读全文
posted @ 2012-03-19 15:01 carekee 阅读(1982) 评论(1) 推荐(1) 编辑
解析几何(一)两个向量的夹角解法
摘要:问题描述平面坐标系中,已知三点坐标,求出任意两点组成的线段之间的夹角。使用向量夹角公式cos<夹角> = 两向量之积 / 两向量模的乘积<夹角> = arccos( 两向量之积 / 两向量模的乘积 ) 1 #include <cmath> 2 using std::acos; // 反余弦函数 3 using std::sqrt; // 平方根函数 4 //--------------------------------------------------------------------------- 5 6 // 点结构体的定义 7 struct TP 阅读全文
posted @ 2012-03-15 09:44 carekee 阅读(8474) 评论(0) 推荐(1) 编辑
一些重要的算法(转)
摘要:After a long discussion with some of my RISC colleagues about what the 5 most important algorithms on the world are, we couldn't reach a consensus on this question. So I suggested to perform a little survey. The criterion for suggestions was that these algorithms should be widely used. Further w 阅读全文
posted @ 2012-02-15 14:13 carekee 阅读(840) 评论(0) 推荐(0) 编辑
判断点在线的左边、右边
摘要:判断点在线的左边还是右边在构建三角网时是非常重要的以及两点p1(x1,y1),p2(x2,y2),判断点p(x,y)在线的左边还是右边。1.bool LeftOfLine(const ZCoord2D& p, const ZCoord2& p1, const ZCoord2D& p2){ double tmpx = (p1.x - p2.x) / (p1.y - p2.y) * (p.y - p2.y) + p2.x; if (tmpx > p.x)//当tmpx>p.x的时候,说明点在线的左边,小于在右边,等于则在线上。 return true;retur 阅读全文
posted @ 2011-12-23 15:42 carekee 阅读(13744) 评论(0) 推荐(2) 编辑
【转】 数据的归一化处理
摘要:归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量,避免具有不同物理意义和量纲的输入变量不能平等使用。在统计学中,归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在-1--+1之间是统计的坐标分布。 由于采集的各数据单位不一致,因而须对数据进行[-1,1]归一化处理,归一化方法主要有如下几种,供大家参考:(by james)1、线性函数转换,表达式如下:y=(x-MinValue)/(MaxValue-MinValue)说明:x、y分别为转换前、后的值,MaxValue、MinValue分别为样本的最大值和最小值。2、. 阅读全文
posted @ 2011-11-28 11:02 carekee 阅读(10266) 评论(0) 推荐(0) 编辑
几种经典的滤波算法(转)
摘要:1、限幅滤波法(又称程序判断滤波法) A、方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A) 每次检测到新值时判断: 如果本次值与上次值之差<=A,则本次值有效 如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值 B、优点: 能有效克服因偶然因素引起的脉冲干扰 C、缺点 无法抑制那种周期性的干扰 平滑度差 2、中位值滤波法 A、方法: 连续采样N次(N取奇数) 把N次采样值按大小排列 取中间值为本次有效值 B、优点: 能有效克服因偶然因素引起的波动干扰 对温度、液位的变化缓慢的被测参数有良好的滤波效果 C、缺点: 对流量、... 阅读全文
posted @ 2011-11-28 11:01 carekee 阅读(52472) 评论(0) 推荐(2) 编辑
简单介绍VC++6.0下如何使用压缩库ZLIB 转
摘要:1. 如何获得zlibzlib的主页是:http://www.zlib.net/2. 用VC++6.0打开把下载的源代码解压打开,VC6.0的工程已经建好了,在\projects\visualc6. 双击zlib.dsw, 可以在VC++6.0中看到里面有3个工程: zlib 是库文件(编译设置选中 win32 lib debug / release), 工程example 是如何使用 zlib.lib 的示例, 工程minigzip 是如何用 zlib 提供的函数读写.gz文件的示例(*.gz的文件一般Linux下比较常用).3. 如何加入到我的工程编译好 zlib.lib 后, 你就得到了 阅读全文
posted @ 2011-09-29 17:35 carekee 阅读(562) 评论(0) 推荐(0) 编辑
JPEG文件编/解码详解 转
摘要:JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写。它由国际电话与电报咨询委员会CCITT(The International Telegraph and Telephone Consultative Committee)与国际标准化组织ISO于1986年联合成立的一个小组,负责制定静态数字图像的编码标准。小组一直致力于标准化工作,开发研制出连续色调、多级灰度、静止图像的数字图像压缩编码方法,即JPEG算法。JPEG算法被确定为国际通用标准,其适用范围广泛,除用于静态图像编码外,还推广到电视图像序列的帧内图像压缩。而用JPEG算法压缩出来的 阅读全文
posted @ 2011-09-29 17:31 carekee 阅读(1410) 评论(0) 推荐(0) 编辑
计算几何算法概览
摘要:一、引言 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案,比如几何问题。作为计算机科学的一个分支,计算几何主要研究解决几何问题的算法。在现代工程和数学领域,计算几何在图形学、机器人技术、超大规模集成电路设计和统计等诸多领域有着十分重要的应用。在本文中,我们将对计算几何常用的基本算法做一个全面的介绍,希望对您了解并应用计算几何的知识解决问题起到帮助。二、目录 本文整理的计算几何基本概念和常用算法包括如下内容: 矢量的概念 矢量加减法 矢量叉积 折线段的拐向判断 判断点是否在线段上 判断两线段是否相交 判断线段和直线 阅读全文
posted @ 2011-05-24 10:23 carekee 阅读(465) 评论(0) 推荐(0) 编辑
通过经度纬度得到距离
摘要:C#的写法 public struct EarthPoint { public const double Ea = 6378137; // 赤道半径 WGS84标准参考椭球中的地球长半径(单位:m) public const double Eb = 6356725; // 极半径 public readonly double Longitude,Latidute; public readonly double Jd; public readonly double Wd; public readonly double Ec; public readonly double Ed; public 阅读全文
posted @ 2011-01-31 15:20 carekee 阅读(433) 评论(1) 推荐(0) 编辑
Bezier曲线原理及实现代码(c++)
摘要:Bezier曲线原理及实现代码(c++) 一、原理:贝塞尔曲线于1962年,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由 Paul de Casteljau 于1959年运用 de Casteljau 算法开发,以稳定数值的方法求出贝塞尔曲线。线性贝塞尔曲线给定点 P0、P1,线性贝塞尔曲线只是一条两点之间的直线。这条线由下式给出: 且其等同于线性插值。二次方贝塞尔曲线的路径由给定点 P0、P1、P2 的函数 B(t) 追踪:。 TrueType 字型就运用了以贝塞尔样条组成的二次贝塞尔曲线。P0、P1、P2、P3 阅读全文
posted @ 2011-01-30 13:46 carekee 阅读(6294) 评论(0) 推荐(1) 编辑
判断点在直线的哪一侧
摘要:2.2.1下面开始程序的设计:由于本部分需要判断空间多边形的拓扑关系,现在约定凸多边形的边界和内部,凸多边形用顶点坐标的逆时针方向序列确定。凸多边形P Q 的顶点序列为 p1 p2 ..pn 和q1 q2 …qn 。为了简单,假设P边界上不包含Q的顶点,Q的边界上不包含P的顶点。这使得P 和Q或者完全分离,或者重叠而交出一个新的凸多边形。(这是我对本部分的初步设计。)程序部分: str... 阅读全文
posted @ 2010-11-15 13:01 carekee 阅读(11412) 评论(0) 推荐(0) 编辑
扫描多边形填充算法
摘要:多边形填充,就是把多边形所占据的栅格象素赋予指定的颜色值。要完成这个任务,一个首要的问题就是求出多边形所占据的栅格象素,判断一个网格在多边形内还是多边形外,在多边形内的象素,则赋予指定的颜色值,多边形外的象素,则不赋予指定的颜色值,具体该如何判断象素是否在多边形内呢?这里我们采用”扫描线多边形填充算法”。扫描多边形填充算法的基本原理——在直角坐标系中... 阅读全文
posted @ 2010-07-02 10:26 carekee 阅读(8434) 评论(0) 推荐(0) 编辑
用欧几里得算法求最大公约数
摘要:在数学中用gcd(a, b)来表示两个正整数a和b的最大公约数。而且存在下面这个最大公约数递归定理: gcd(a, b) = gcd(b, a mod b) (mod表示取余数) 欧几里得在《几何原本》中描述了利用上面的定理递归求两个正整数的最大公约数的算法。实现起来非常简单,下面是C++代码:unsigned int Euclid(unsigned int nA, unsigned int n... 阅读全文
posted @ 2010-05-31 23:46 carekee 阅读(479) 评论(0) 推荐(0) 编辑
Fibonacci(斐波那契)序列的递归和非递归算法
摘要:Fibonacci(斐波那契)序列的递归算法大家都已经很熟悉了:// Fibonacci序列第n项的值// 递归算法unsigned int Fib1(unsigned int n){ if (n == 1 || n == 2) return 1; else return Fib(n - 1) + Fib(n - 2);} 而且递归算法的缺点是效率太低,下面是非递归算法:// Fibonacci序... 阅读全文
posted @ 2010-05-31 23:45 carekee 阅读(738) 评论(0) 推荐(0) 编辑


点击右上角即可分享
微信分享提示