码迷,mamicode.com
首页 > 编程语言 > 详细

简单算法和简单逻辑的小软件,是如何获得技术专利的?附完整源码

时间:2015-12-31 01:43:20      阅读:512      评论:0      收藏:0      [点我收藏+]

标签:

源码在最后面有下载,是入行一年时的项目。虽然简陋,却是我人生中的重要里程碑。一直想把背后的故事讲出来,但代码长得丑陋不好意思拿出来。

眼见年终了,丑代码放出来图大家一乐,如果有人学到东西或被后面的故事激起斗志,更是功德一件。

 

功能介绍:一个大片(图中m1-m4四个红色标记点组成),指定旋转角度,最多能切割成多少黑灰色的小片。

输入:见图,小片宽高,大片宽高,角度。

输出:最大切片数。

技术分享

技术涉及屏幕坐标系,数学和几何计算,画图,多线程。

完整的项目有串口控制通信和一些实际工程的代码,和硬件绑定在一起叫自动切割系统,成功申请到工艺发明专利。

主要任务是CPU计算,那时电脑主流是双核,所以只开了两个线程,多开无益。

核心算法原理:

将大片(以四点坐标表示)沿x,y两个方向平移,记录每次平移的坐标和小片数量,最后取最大数量的那个坐标,即为最佳位置。

技术分享
     private BoardCut compute(GlobalVar param)
        {
            //1,计算所有切法的结果集。
            List<BoardCut> 大片list = CoreMethod(param);

            //2,选取能达到最大数量的结果集
            List<BoardCut> maxList = 大片list.Where(m => m.smallNum >= param.maxNum).ToList();
           
            //3,最大数量结果集中随便取一个
            param.boardCutlast = maxList[maxList.Count / 2];

            //4,平移到合适的位置
            float[] rectangleScope = core.getRectangleScope(param.boardCutlast.point4);//计算多边形pmax的范围
            float dx = 1200 - rectangleScope[0];
            float dy = 1200 - rectangleScope[2];
            param.boardCutlast.Move(dx, dy);

            return param.boardCutlast;

        }
View Code
技术分享
 for (int i = theadParam.xStart; i < theadParam.xEnd; i++)
            {

                //每次Y方向循环走完一次,回到y起点,x则加1进行下一次循环
                board.P0.X = x1 + i; board.P1.X = x2 + i; board.P2.X = x3 + i; board.P3.X = x4 + i;
                board.P0.Y = y1; board.P1.Y = y2; board.P2.Y = y3; board.P3.Y = y4;
                for (int j = 0; j < gVar.inSmallHight + 1; j++)
                {
                    board.P0.Y = y1 + j; board.P1.Y = y2 + j; board.P2.Y = y3 + j; board.P3.Y = y4 + j;

                    BoardCut boardCut = new BoardCut();
                    boardCut.point4 = new PointF[] { board.P0, board.P1, board.P2, board.P3 };//大片坐标
                    List<MyRectangle> validRect = new List<MyRectangle>();
                    //对整个网格矩形,如在大片内则数量加1
                    int Mun = 0;
                    foreach (MyRectangle r in gVar.rectangles)
                    {
                        if (core.RectIsInBoard(r, boardCut.point4))
                        {
                            Mun += 1;
                            validRect.Add(r);
                        }
                    }

                    boardCut.smallNum = Mun;
                    boardCut.smallList = validRect;
                    BoardCutList.Add(boardCut);
                    if (Mun > gVar.maxNum)
                    {
                        gVar.maxNum = Mun;
                    }
                }

            }
View Code

 

------------------故事分割线----------------------------------------------------------------------------

选择程序员是一个悲伤的故事。没有学历,专业又冷门,找点正式的工作到处碰壁。没有任何亲戚朋友的支持和交流,绝望之余只好虚拟出了一个”系统”和自己对话。

 

系统悄悄地对你说:你在地球OL中选择了地狱难度,经过无数搏杀的你竟然弄没了毕业证。新手礼包没领到,裸奔出新手村连木剑都没有,结果野狗都打不死。28级了还在裸奔,也没有战斗技能,一个金币都没赚到,你的人生还真是失败。。。

我:好死不如赖活,活着就有希望。

叮,系统提示:您领悟了“看破红尘,游戏人生”,开启了上帝视角,激活天赋技能“精神胜利法”。

 

最后进了这家类似富士康的工厂做工人,就叫“富土康”吧。“富土康”实行早八晚九,每天早八点上班,午休一小时,晚九点下班吃晚饭。环境闷,晚餐太晚,每天中午能见到一点太阳,用暗无天日来说富土康一点都不夸张。每月最多休两天,小病也得忍着来上,否则扣工资另外罚款。工人跟机器一样只要求产量和上班时间,没有额外的动作和交谈。经常有人晕倒被送120,其中有的人没有回来过。我的时薪是5元,每月全勤刚好5*10小时*30天=1500元。

 

打怪打不动,就从难度低的学徒工做起吧,28级的高中矿工至少比那些18级的初中矿工强一些,总能找到理由安慰自己。

叮,系统提示:你使用了技能“打工”(说明:获得1500金币,冷却时间30天)。你使用了”精神胜利法”恢复了5点精神值。

 

车间是密闭的,工作服也是密不透风像搞消防的一样,我的工作是在热炉旁来回运货。而一起毕业的同学们,大部分在各大研究所做技术骨干。几个在中科院做研究生,有几个留校读研读博,还有个进了人类最强的NASA,而我在工厂做苦工。无数次做梦都回到学校在重新学习,有时在核战后的废墟上研究黑科技,有时在坟场和野鬼们合作研究灵魂学,经常半夜醒来想起一句老歌“落后就要被挨揍,永世不见日头”。

 

叮,系统警告:你的精神值小于5点,”精神胜利法”无法使用。请尽快学习战斗技能,否则将Game Over。

 

网上搜索发现程序员工资高,上手快,没有学历要求。立刻买本C++书来学习(没钱买电脑)。晚上看书时间不够,就抄几页代码到车间偷偷看。车间很闷热,热炉旁边思考代码更是满头大汗,经常想得出神被组长辱骂,旁边工友的表情是这样:

技术分享

 

谁让我选择了地狱难度18层的“中国制造”副本呢,这时我就在心里唱“落后就要被挨揍,永世不见日头”。狼离开了草原,容易泯灭在野狗群中,甚至比野狗死得更快。

叮,系统提示:你使用技能“自我激励” 补满了精神值(技能说明:跟我一起唱“如果快乐你就拍拍手,如果落后你就被挨揍,如果落后你就被挨揍啊”)。

叮,系统提示:你获得了称号“机械狂魔”,意志+5(称号说明:作为一个工作机器,还妄想自由和力量,机器也会发疯?)。

 

干了三个月后,工厂内部招聘程序员,我凭那一点C++淘汰了其它的大专选手。由于学历是高中只能作为临时工拿2000工资,没有人教,直接开始做数据库程序。信息部原来是4个人用PB,Delphi,C#3种语言,我加入后变成5个人用4种开发语言。后来被VS强大的IDE折服,转用C#开发数据库程序,在博客园安了家。

叮,系统提示:恭喜你!您获得了技能“写代码”,你获得了称号“程序猿”。

 

一年后,用这个软件改进了车间的传统切割排版工艺(已经使用10多年),每年节省几百万的原料费,并申请专利成功。被高层”破格提拨”为正式开发人员,享受本科毕业生的4000月薪待遇。

叮,系统提示:你在30级之前终于达到玩家的平均水平,获得成就“赶上最后一班车”。额外提示:如未获得该成就你将会悲壮唱一辈子的永世不见日头,获该成就你会唱得快乐一些。“如果快乐你就拍拍手,如果落后你就被挨揍”。

 

这个里程碑对于别人可能是微不足道的,但对我来说是改变命运的关键。2015年终回顾,分享这个项目,希望对一些人有帮助。

 

工厂、监狱和某某,都是很相似的。都是等级森严,管理严格。都是把属于你的夺走,然后再还给你让你感恩戴德。都是让人为吃口饱饭而劳碌,没有时间胡思乱想,实现稳定与和谐。

 

 

也许工厂老板看了会不高兴,但那又如何。也许身体被工作和家庭绑定无法挣脱,但心是自由的。

 

源码下载:http://files.cnblogs.com/files/zkp2010/大片切小片.rar

 

简单算法和简单逻辑的小软件,是如何获得技术专利的?附完整源码

标签:

原文地址:http://www.cnblogs.com/zkp2010/p/5090244.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!