程序员进阶之一
来源:互联网 发布:mac系统软件无反应 编辑:程序博客网 时间:2024/05/18 09:19
前段时间写过几篇<致新手>,对广大青菜还是有用的,现在给有一定基础的写几篇
以前我不怎么重视数学,尤其是高等数学,高考时候就是因为数学不及格,与重点大学擦肩而过...
近期搞些3D啊什么的算法,才发现高级的数学知识还是挺有用的~
也证明了那句话:书到用时方恨少! 还好我只缺数学,而且重视一下问题就可以解决了.
第一个例子,我们自己画一个圆角的窗口.
首先,任何窗口(Window)在Windows下都是一个矩形的区域,常见的做法是:
透明不想要的区域,将该区域设为某一种颜色,然后透明该颜色
圆角其实只要在四个顶角画一个圆,圆以外部分透明即可
然而做一件事情,我们的追求往往是这样,做得了->做得好->做得妙!
最笨的方法当然是二重循环,一个个点的算出距离,然后距离大于R的画上紫色
对于无边框的窗体,代码就应该是
然而,直观看出半径以外的区域占的面积是较小的,因此有一部分我们其实不必要判断的
那就是这条直线以内的,用两点可以求出方程,对于右上角就是Y=R-X
如果是逐列(从左到右)处理,直接代入,我习惯逐行,因此变换一下为:X=R-Y
那么处理右上角的代码就应该是:
至此,我们有一半的面积没有参与计算,速度就提高了将近一倍!
对于其他的顶角,一样的道理
然而这是又有另外一个问题,半径的大小怎么定?
如果是标题栏高度的一半,那么显得像个帽子,1/4有点感觉,还是没到点上
我们换一个半径,都市的白领喜欢搞三角关系,我们也用三角形说明问题
如图,BC=AB/2, CD=BC, AE=AD
我相信有人知道我想说什么,不错,黄金分割点,约为0.618
确切的值是:根号5-1的差的一半
分割比K有很多奇妙的东西,比如1/1+K=K,1+K/1=1/K
我们用1-K来做为圆角直径,实际上微软的XP窗口就是这么干的,好了贴代码
文章写的有点久,丢失了一次,影响心情,C/C++的代码就不写了,郁闷
- 程序员进阶之一
- Windows程序员进阶系列:《软件调试》之一:调试基础
- Windows程序员进阶系列:《软件调试》之一:调试基础
- 程序员进阶
- 程序员进阶
- 程序员进阶
- 程序员进阶
- 程序员进阶
- SQL 进阶学习之一
- ORACLE进阶之一:HINT
- ORACLE进阶之一:HINT
- volatile-进阶之一
- mac os进阶之一
- mac os进阶之一
- 多线程进阶之一
- JavaScript进阶篇之一
- 我的进阶曲线之一
- 程序员进阶书籍
- 单片机C语言的入门篇
- SQL优化34条
- 使用X-UA-Compatible来设置IE8兼容模式
- The breakpoint will not currently be hit. The source code is different from the original version
- Eclipse集成Flex
- 程序员进阶之一
- 使用SQL语句给表增加列
- 【转】一些 java文件的操作示例
- IE6、IE7、IE8之IE多版本共存的几种方法
- 最新HP0-M22认证测试引擎下载--TestInside网站提供
- Java VisualVM
- Purpose of the Telecom Project 1029 ------- No deletion of any Doc for the project.
- notepad 换行要用 ‘/r/n’
- DPL,RPL,CPL 之间的联系和区别