随笔 - 373  文章 - 1  评论 - 771  阅读 - 137万

随笔分类 -  算法

二维平面上判断点在三角形内的最优算法
摘要:园子里有很多关于点是否在三角形内的文章,提供了各种方法。这让人很纠结,到底该用哪种算法?这里提供一套我认为最优的算法。如果你有不同的意见,亦或有更好的算法,欢迎来讨论。 算法使用的是同向法,其原理是:假设点P位于三角形ABC内,会有这样一个规律:三角形的每一个边,其对角点与P在边的同一侧;或者... 阅读全文
posted @ 2014-10-31 11:52 叶飞影 阅读(4261) 评论(6) 推荐(3) 编辑
使用异或运算对数据及文件进行加密处理,附软件及源码
摘要:前几天写了一篇文章是在C语言中使用异或运算交换两个任意类型变量,其基础为使用^交换两个整数的算法:a ^= b;b ^= a;a ^= b;如果你看明白这个算法,就会发现这样的规律:一个数异或另一个数两次后,该数保持不变。即: c = a^b; c = c^b; c == a;这一规律就是使用异或运... 阅读全文
posted @ 2014-10-27 07:08 叶飞影 阅读(4328) 评论(4) 推荐(1) 编辑
使用异或运算交换两个任意类型变量
摘要:这篇文章中将使用C语言,实现交换两个任意类型变量的功能.有人认为异或运算只能用于整数类型的交换,实际上异或运算是针对二进制的.既然计算机所有的数据类型都是以二进制进行保存的,那么当然可以用异或运算交换任何数据类型. 阅读全文
posted @ 2014-10-21 14:08 叶飞影 阅读(2703) 评论(8) 推荐(2) 编辑
游戏中角色曲线行走的算法
摘要:这几天工作中碰到一个需求:使游戏中的NPC角色以非直线的方式走到某一位置。角色在朝着目标位置移动时,有一定的左右偏移,但到达目标位置时不能有偏差。问题中已知的是平面上的两个二维坐标点表示起点与终点,最大的偏移范围。当给定一个时刻时,需要输出角色的当前位置。 首先我做的是将整个行走轨迹画出来... 阅读全文
posted @ 2014-10-21 06:47 叶飞影 阅读(3040) 评论(1) 推荐(3) 编辑
给定任意字符串,计算一共能组合成多少个单词bing
摘要:CSDN编程挑战里的题目例如有一个字符串"iinbinbing",截取不同位置的字符‘b’、‘i’、‘n’、‘g’组合成单词"bing"。若从1开始计数的话,则‘b’ ‘i’ ‘n’ ‘g’这4个字母出现的位置分别为(4,5,6,10) (4,5,9,10),(4,8,9,10)和(7,8,9,10),故总共可以组合成4个单词”bing“。问题是:现给定任意字符串,只包含小写‘b’ ‘i’ ‘n’ ‘g’这4种字母,请问一共能组合成多少个单词bing?字符串长度不超过10000,由于结果可能比较大,请输出对10^9 + 7取余数之后的结果。这个问题写个四 阅读全文
posted @ 2014-01-16 12:30 叶飞影 阅读(1143) 评论(5) 推荐(0) 编辑
找出最长的有效括号内子括号的长度
摘要:CSDN编程挑战里的题目给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度。 举几个例子如下: 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数1个,故它的长度为 2。 再比如对于字符串") () () )",其中最长的有效的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4。 再比如对于"( () () )",它的长度为6。 换言之,便是有效双括号"()"数的两 阅读全文
posted @ 2014-01-15 12:36 叶飞影 阅读(1261) 评论(1) 推荐(0) 编辑
计算直方图中面积最大的矩形
摘要:CSDN编程挑战里的题目给定直方图,每一小块的height由N个非负整数所确定,每一小块的width都为1,请找出直方图中面积最大的矩形。如下图所示,直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]: 那么上述直方图中,面积最大的矩形便是下图所示的阴影部分的面积,面积= 10单位。 请完成函数largestRectangleArea,实现寻找直方图中面积最大的矩形的功能,如当给定直方图各小块的高度= [2,1,5,6,2,3] ,返回10。这题挺容易的,可是我提交的程序反馈是有问题,又没给说具体的出错测试用例.而我自己测试的数据都没问题.懒得多想了. 1... 阅读全文
posted @ 2014-01-15 12:32 叶飞影 阅读(739) 评论(0) 推荐(0) 编辑
三角形内切圆与外接圆的面积比
摘要:CSDN编程挑战里的题目一个三角形必然存在它的内切圆与外接圆,求他们的面积比。考虑到精度问题,我们输出面积比*1000的整数部分(直接下取整)。输入数据是一个三角形的三个顶点,但这三个顶点在三维空间中,所以输入是9个整数,分别表示三个顶点(x1,y1,z1) (x2,y2,z2) (x3,y3,z3),保证三点不共线,每个整数在-1000,+1000范围内。输出内接圆与外切圆的面积比*1000的整数部分。这题好搞,图形学我是专业的. 1 #include 2 #include 3 #include 4 #include 5 6 // 内切圆半径 7 // 内切圆半径r=2S/(a+b... 阅读全文
posted @ 2014-01-15 12:01 叶飞影 阅读(3064) 评论(0) 推荐(0) 编辑
整数求反
摘要:CSDN编程挑战里的题目完成函数reverse,要求实现把给定的一个整数取其相反数的功能,举两个例子如下: x = 123, return 321 x = -123, return -321 这个题容易,一击命中. 1 #include 2 #include 3 #include 4 5 int IntegerReverse(int i) 6 { 7 bool negative = false; 8 if (i = 0; i--)25 {26 rst += numList[i]*n;27 n *= 10;28 }29 30... 阅读全文
posted @ 2014-01-15 11:57 叶飞影 阅读(476) 评论(0) 推荐(1) 编辑
24点问题
摘要:CSDN编程挑战里的题目24点游戏是一种使用扑克牌来进行的益智类游戏,游戏内容是:从一副扑克牌中抽去大小王剩下52张,任意抽取4张牌,把牌面上的数(A代表1)运用加、减、乘、除和括号进行运算得出24。每张牌都必须使用一次,但不能重复使用。 有些组合有不同种算法,例如要用2,4,6,12四张牌组合成24点,可以有如下几种组合方法: 2 + 4 + 6 + 12 = 24 4 × 6 ÷ 2 + 12 = 24 12 ÷ 4 × (6 + 2) = 24 当然,也有些组合算不出24,如1、1、1、1 和 6、7、8、8等组合.我的思路是穷举法,将四个数的所有 阅读全文
posted @ 2014-01-15 11:53 叶飞影 阅读(4651) 评论(64) 推荐(1) 编辑
二十进制数的加法
摘要:CSDN编程挑战里的题目在二十进制中,我们除了使用数字0-9以外,还使用字母a-j(表示10-19),给定两个二十进制整数,求它们的和。 输入是两个二十进制整数,且都大于0,不超过100位; 输出是它们的和(二十进制),且不包含首0。我们用字符串来表示二十进制整数。可惜我提交了6次才正确,我想要确保有抽奖的可能,需要申请两个帐号,一个做炮灰,另一个一击命中. 1 #include 2 #include 3 #include 4 5 static int GetNum(char c) 6 { 7 if (c >= '0' && c = 'a' 阅读全文
posted @ 2014-01-15 11:49 叶飞影 阅读(738) 评论(0) 推荐(0) 编辑
将整数转化为一个任意进制的字符串,将任意进制的字符串转化为一个整数的代码
摘要:// 将整数转化为一个任意进制的字符串 static void int_to_string(int value, char* szDest, int type = 10) { bool negative = false; if (value = 0; i--) { szDest[pos] = szTmp[i]; pos++; } szDest[pos] = 0; } static int GetNum(char c) { if (... 阅读全文
posted @ 2014-01-13 13:41 叶飞影 阅读(1635) 评论(1) 推荐(1) 编辑
C 图像处理 颜色相关宏定义
摘要:很多年前整理的,像素处理的宏定义,包括r8g8b8到r5g6b5之间的相互转化,浮点数像素与整数值之间的相互转化,像素值的插值、取反等处理。具体没什么好说的,宏定义的代码还是很容易看的。这套东西对搞图像处理的来说非常有意义。 1 /**************************************************************** 2 3 File name : WhyColorDefines.h 4 Author : 叶飞影 5 Version : 2.0 6 Create Date : 2010/08... 阅读全文
posted @ 2013-12-02 16:29 叶飞影 阅读(1088) 评论(1) 推荐(1) 编辑
8*8数组构成的字母表
摘要:前几天写的游戏"弹球敲方块"和"打方块"中需要按照字母来生成方块的组合.一开始想从网上找到这样的数据,却没有找到,只好自己写.10个数字和26个英文大写字母.小写字母的没有实现,希望有人能给我补充上. 1 bool g_char_null[64] = 2 { 3 0,0,0,0,0,0,0,0, 4 0,0,0,0,0,0,0,0, 5 0,0,0,0,0,0,0,0, 6 0,0,0,0,0,0,0,0, 7 0,0,0,0,0,0,0,0, 8 0,0,0,0,0,0,0,0, 9 0,0,0,0,0,0,0,0... 阅读全文
posted @ 2013-11-21 21:42 叶飞影 阅读(1057) 评论(1) 推荐(1) 编辑
已知三角形的两点坐标,和三个边长,求第三点的坐标
摘要:前几天做一个功能,实现N多圆球的碰撞时,写的该算法.代码比较容易,使用了三角形的余弦定理.算法是二维的,改成三维也容易.其实三维的我也实现过,用于骨骼动画的IK处理上. 1 // 已知三角形的两点坐标,和三个边长,求第三点的坐标. 2 bool CalculateTriangleThirdPoint(const Vector2& vA, const Vector2& vB, Vector2& vC, float a, float b, float c) 3 { 4 float cosA = (b*b + c*c - a*a) / (2*b*c); 5 if (cosA 阅读全文
posted @ 2013-11-14 20:26 叶飞影 阅读(6666) 评论(1) 推荐(0) 编辑
3D有向包围盒与球体碰撞的算法
摘要:之前发的小游戏滚蛋躲方块中,用它来判断球体与立方体是否发生了碰撞.http://www.cnblogs.com/WhyEngine/p/3350012.html现在发布下该算法:有向包围盒OBB,是有旋转变化的包围盒,由三种数据组成:obbCenter表示包围盒的中心位置obbAxes[3]表示包围盒XYZ三个坐标轴方向上的朝向,应该是正交的,否则意思着立方体有扭曲变形.并且应该是单位向量.halfExtents表示包围盒三个方向上的长度.该算法是多年前,已经不记得从什么地方找的了,自己又做了点修改.该代码其实可以更加简化一些,因为原代码中是可以计算球与包围盒的碰撞深度与碰撞的法线方向的.而这 阅读全文
posted @ 2013-11-10 14:22 叶飞影 阅读(2191) 评论(1) 推荐(0) 编辑
三维体数据分割算法
摘要:三维体数据分割算法本文基于分裂合并分割算法,提出了两种新的分割算法:基于八叉树的分裂合并算法和基于自适应包围盒的分裂合并算法。下面将对这两种算法进行描述。1 分裂合并法分析 区域生长法的原理是根据种子像素点(体数据中为体素点)向其周围扩散,对区域周围的每一个像素/体素进行分析。区域生长法需要用额外的内存区域来保存待生长的像素/体素点,并且算法的时间复杂度较大。区域生长的过程中,需要以像素/体素为单位一圈一圈地向外扩张。对于体数据来说,区域生长法花费较多的运算时间。 分裂合并的基本思想是:先将整幅图像或体数据依据某种规则分裂出很多个形状规则的子区域,子区域内的像素或体素特征具有一致性,然后合并特 阅读全文
posted @ 2013-11-01 20:54 叶飞影 阅读(4654) 评论(1) 推荐(0) 编辑

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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