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

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

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

功能介绍:一个大片(图中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;

        }

 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;
                    }
                }

            }

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

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

系统悄悄地对你说:你在地球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

时间: 2024-10-08 11:13:22

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

微信小程序 授权登录详解(附完整源码)

一.前言 由于微信官方修改了 getUserInfo 接口,所以现在无法实现一进入微信小程序就弹出授权窗口,只能通过 button 去触发. 官方连接:https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01 二.实现思路 自己写一个微信授权登录页面让用户实现点击的功能,也就是实现了通过 button 组件去触发 getUserInof 接口.在用户进入微信小程序的时候,判断用户是否

基于Servlet、JSP、JDBC、MySQL的一个简单的用户注册模块(附完整源码)

最近看老罗视频,做了一个简单的用户注册系统.用户通过网页(JSP)输入用户名.真名和密码,Servlet接收后通过JDBC将信息保存到MySQL中.虽然是个简单的不能再简单的东西,但麻雀虽小,五脏俱全,在此做一归纳和整理.下面先上源码: 一.index.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path =

【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/20043459   前言 本来想将所有的内部排序总结为一篇博文,但是随着研究的深入,还是放弃了这个念头,斟前酌后,还是觉得分开来写比较好,具体原因,看完本篇博文也就自然明了了. 本篇文章主要探讨插入排序和希尔排序,之所将二者放在一起,很明显,是因为希尔排序是建立在插入排序的基础之上的.     注:以下各排序算法的N种实现方法大部分都是我根据算法思想,自己写出来的,或者是参考其本身的经典实

【数据结构与算法】二叉树递归与非递归遍历(附完整源码)(转)

转自:http://blog.csdn.net/ns_code/article/details/12977901 二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的.二叉树有前.中.后三种遍历方式,因为树的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁且容易理解,但其开销也比较大,而若采用非递归方法实现三种遍历,则要用栈来模拟实现(递归也是用栈实现的).下面先简要介绍三种遍历方式的递归实现,再详细介绍三种遍历方式的非递归实现. 一.三种遍历方式的递

Python基础教程3——教你用Python做个简单的加密程序(还基础什么呀,直接来练习吧,带源码)

因为发现基础教程我之前推荐的那个网站就已经很完善了,就不重复写了,所以本汪来一起做练习吧. 一.加密原理 记得当时我学c++的时候,学到输入输出流的时候,当时王老师就教我们写了一个小的加密程序,所以这次既然学习了Python这个小练习当然不能放过(其实这个加密程序我用c++,java都写过可以说也算比较熟了).加密原理就是循环读取文件每个字节,然后进行相应的加密运算后就是加密操作了,解密时候进行逆运算就是解密操作了. 比如我们读取文件的第一个字节数据是20(读取出来的每位数据为0~255,因为8

A*算法(附c源码)

关于A*算法网上介绍的有很多,我只是看了之后对这个算法用c写了一下,并测试无误后上传以分享一下,欢迎指正!下面是我找的一个介绍,并主要根据这个实现的. 寻路算法不止 A* 这一种, 还有递归, 非递归, 广度优先, 深度优先, 使用堆栈等等, 有兴趣的可以研究研究~~ 简易地图 如图所示简易地图, 其中绿色方块的是起点 (用 A 表示), 中间蓝色的是障碍物, 红色的方块 (用 B 表示) 是目的地. 为了可以用一个二维数组来表示地图, 我们将地图划分成一个个的小方块. 二维数组在游戏中的应用是

js算法:动态规划-金矿模型与买书问题(附js源码)

本文内容介绍转自博客:通过金矿模型介绍动态规划,后面附上我自己实现的js代码: 经典的01背包问题是这样的: 有一个包和n个物品,包的容量为m,每个物品都有各自的体积和价值,问当从这n个物品中选择多个物品放在包里而物品体积总数不超过包的容量m时,能够得到的最大价值是多少?[对于每个物品不可以取多次,最多只能取一次,之所以叫做01背包,0表示不取,1表示取] 为了用一种生动又更形象的方式来讲解此题,我把此题用另一种方式来描述,如下: 有一个国家,所有的国民都非常老实憨厚,某天他们在自己的国家发现了

最快速的“高斯”模糊算法(附Android源码)

? 这是一个外国人的算法,本人是搬运工.参考:http://blog.ivank.net/fastest-gaussian-blur.html ? 1:高斯模糊算法(参考:http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html) 所谓的模糊算法就是当前像素点和周围像素点进行加权均值之后的结果替换当前像素值.因此均值模糊是最简单的,只要将周围的像素点相加取平均值即可. ????而高斯模糊则是将周围的像素点的权值按照高斯分布进行取值,即根据

直通BAT算法精讲附程序源码

课程内容第1章 免费试看2 视频 | 2 练习字符串和二叉树问题免费试看1.1 二叉树打印 免费1.2 二叉树打印练习题 免费1.3 字符串 免费1.4 两串旋转练习题 免费 第2章 排序4 视频 | 16 练习详细介绍常见的排序算法过程,以及各个排序算法稳定性.时间和空间复杂度,当然还有常见面试题目的讲解.2.1 排序(1)2.2 冒泡排序练习题2.3 选择排序练习题2.4 插入排序练习题2.5 归并排序练习题2.6 快速排序练习题2.7 堆排序练习题 免费2.8 希尔排序练习题2.9 排序(