摘要:
最近在写一个程序,其中需要对B样条曲线进行拟合。但是B样条曲线的公式实在复杂,看着就头晕。于是,我将问题进行了简化。一段B样条曲线,可以近似地看成是若干段抛物线构成的,所以,曲线拟合问题就被转换为抛物线拟合问题了。对于抛物线拟合问题,可以使用《计算方法》中的最小二乘法,最后求解线性方程组的地方,用的是高斯消去法。本文用C#实现了这两种算法。 最小二乘法是一种数据优化技术,在已经得到一组数据的情况下,通过最小化误差平方和的办法,找出最接近的函数。关于最小二乘法的详细说明,可以查看维基百科,本文直接把其中的公式拿来使用。 假设有一组实测的坐标点数据,绘制在窗体上,效果如下图所示: 从图上可以看出. 阅读全文
摘要:
在北京、上海这样的一线城市,地铁绝对是上班族的首选交通工具,尽管有时挤得要命,但你真的找不出比地铁更准点的交通工具了。平时出门,我也总是习惯于在百度地图或丁丁地图里先查询一下地铁乘车路线,这些程序用起来非常方便。最近几天终于有点空余时间了,我就在想,我是否也可以写一个这样的程序?作为一名专业码农,我 阅读全文
摘要:
在上一篇随笔中,大家给出了不少建议,尤其是指出了截屏方法的不足之处。其实,使用上述方法去截屏也是逼不得已,因为公司实际项目需求中,还有其他一些要求,在此不便细说。如果仅仅为了截屏,我推荐大家直接用WebBrowser控件来实现,非常简单。实现步骤如下:(1)新建一个Form应用程序,在窗体上添加一个Panel,假设Name为panel1,设置:panel1.AutoScroll=true。(2)在panel1中放置一个WebBrowser控件,假设Name为webBrowser1,设置:webBrowser1.ScriptErrorsSuppressed = true;(禁止弹出脚本错误框)( 阅读全文
摘要:
最近项目中涉及到浏览器整页截屏的功能,有点复杂,研究了一天,终于在IE浏览器下实现,至于其他浏览器,以后再研究。所谓整页截屏,就是说把整个页面全部截进去,包括通过滚动才能看到的部分。在网上搜了一下,大家用的都是同一种办法:通过滚动页面,截取每一屏的图片,然后再合并成一张整的图片。方法是好的,悲催的是,没有一个代码是能正常运行的,相信很多人都有同感!没办法,自己动手,丰衣足食。我需要用.NET来实现。分析一下,主要有以下几个技术点:1、如何取得浏览器对象。首先要确定IE版本,我用的是IE8浏览器,对象结构和IE6、IE7有点区别。这个可以通过Win32API中的FindWindow函数来实现。2 阅读全文
摘要:
最近在封装Excel组件,需要提供两个接口,分别根据单元索引和单元名称访问单元格。例如,GetCell(1, 2)和GetCell(“A2”),这两种方法返回的结果是相同的。这里遇到一个问题,如何在单元索引([1,2])和单元名称(A2)之间相互转换?由于在单元索引和单元名称中,行号是相同的,所以我们只需要转换列号就可以了。本来以为是个很简单的问题,结果调试了好长时间才搞定。于是写了这篇文章,总结一下。【问题描述】在Excel中,列的名称是这样一个递增序列:A、B、C、…、Z、AA、AB、AC、…、AZ、BA、BB、BC、…、BZ、CA、…、ZZ、AAA、AAB…。我们需要将上述列名序列和以下 阅读全文
摘要:
在Visual Studio .NET中,一个解决方案可以包含多个项目,一个项目可以引用若干其它项目。编译的时候,VS会自动确定每个项目的编译顺序。VS究竟是如何计算出这个顺序的呢?如果学习过数据结构,可以很容易回答出这个问题:拓扑排序(Topological Sort)。什么是拓扑排序?让我们来温习一下。百度百科上的介绍如下:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈E(G),则u在线性序列中出现在v之前。上述介绍抽象,不如用实际案例来解释一下。假如在VS 阅读全文
摘要:
最近编程时遇到一个问题:有一组对象,要求随机地访问其中每一个对象,并且每个对象只访问一次。如果我们将访问顺序转换为一组整数序列,那么这就是一个关于“非重复随机序列生成算法”的问题。本文将探讨这个问题的多种解法,并给出一个非常高效的算法。【问题描述】:有一个自然数N,希望得到一个整型序列,该序列包含N个整数,从0到N-1,呈随机分布状态,且不重复。【问题分析】:生成随机数是简单的,关键是,如何保证不重复呢?一般来说,我们有两种思路: 思路1:我们不能保证每次生成的随机数都是不重复的,但是可以在生成随机数之后,判断这个数值是否已经生成过了,如果已经生成过了,那就重新生成一个,直到生成一个新的数值。 阅读全文