前段时间写过几篇<致新手>,对广大青菜还是有用的,现在给有一定基础的写几篇
以前我不怎么重视数学,尤其是高等数学,高考时候就是因为数学不及格,与重点大学擦肩而过...
近期搞些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++的代码就不写了,郁闷
分享到:
相关推荐
编写自文档化的代码/如果说编程语言是一种宗教,你的信仰是?/迷人的斐波那契数 /iBATIS In Action:序言和目录
这是一本C/C++语言应用能力进阶的图书,总结了一个典型的学习者第101个小时开始的学习路线和心得,你值得拥有。 本书内容包括夯实C语言核心基础、提升你的编程功力、积累专业程序员开发经验、理解C++精髓和以C++为...
一般的程序员或许只需知道一些JAVA的语法结构就可以应付了。但要成为JAVA(高级)工程师,您要对JAVA做比较深入的研究。您应该多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、线程。如果可能,希望您对JAVA...
总归一句话:养成一颗奋发的平常心。 声明:整理内容大部分来源于网络,如果内容作者认为侵犯了您的权益,请联系邮箱,我会配合处理,谢谢。 为了获得更好的阅读体验,在线阅读推荐方式 实用工具 论坛网站 文档大全 ...
C/C++进阶书籍系列C/C++程序员进阶之路高清pdf系列书籍之--C++编程思想[第一卷]pdf
Spring Cloud是目前最流行的进行微服务架构的框架之一,是一个一站式的开发分布式系统的框架,为开发者提供了一系列的构建分布式系统的工具集。目前已经在各大互联网公司得到广泛应用,是进行微服务架构的优先选择...
如生成服从各种分布的样本 通过模拟理解数学上艰涩的概念 学习贝叶斯估计等实用内容 用Python导入各种来源的数据 运用统计推断解决真实数据问题《统计思维:程序员数学之概率统计》是一本以全新视角讲解概率...
一份通俗易懂、风趣幽默的Java学习指南,内容涵盖Java基础、Java并发编程、Java虚拟机、Java企业级开发、Java面试等核心知识点。学Java,就认准Java 程序员进阶之路
本书最后一部分围绕PHP应用程序开发,详细介绍了一批极为实用的辅助开发工具,讨论了具有普遍意义的最佳开发..., 本书适合每位PHP程序员进阶参考,帮助他们掌握PHP面向对象设计和开发的精髓,跻身高端PHP程序员之列。
如生成服从各种分布的样本 通过模拟理解数学上艰涩的概念 学习贝叶斯估计等实用内容 用Python导入各种来源的数据 运用统计推断解决真实数据问题《统计思维:程序员数学之概率统计》是一本以全新视角讲解概率...
这是一套程序员C++讲义,讲义分为多个阶段的讲义,这里整理了基础入门、核心编程和提高编程的PDF讲义内容,一个不错的C++教程,从0到1入门编程讲义,最详细的c++入门,核心,提高讲义笔记,需要的朋友可下载试试!...
《C#与.NET程序员面试宝典》主要内容包括:面试流程、基础语法和技术框架、数据访问及XML应用、高级特性及应用进阶、测试及质量保证、跨国公司经典面试题等。 《C#与.NET程序员面试宝典》附带1张光盘,内容为书中...
面试高频算法、akka、多线程、NIO...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。
大数据湖中Hive是一个非常重要的工具,它是用来做数仓、BI的不二之选,虽然Hive其实就是写Sql但是,对于其原理和优化我们在实际工作中必须要了解的,有利于提高集群的执行效率,也是程序员进阶的一项指标
SUN公司认证Java程序员(SCJP)与SUN公司认证Java开发员(SCJD)之间的一个显著区别就是:SCJP不考EJB,而SCJD要考。随着越来越多的企业采用J2EE平台开发电子商务应用系统,EJB开发已成为今天的Java程序员必须要面对...
本书是.NET 程序员进阶修炼的必读之作,由拥有多年开发经验的资深.NET 技术专家对C# 和.NET 中实用的、关键的和难以理解的知识点进行了深入解析,旨在帮助读者在尽可能短的时间内以 尽可能低的学习成本去掌握那些最...
本书是.NET 程序员进阶修炼的必读之作,由拥有多年开发经验的资深.NET 技术专家对C# 和.NET 中实用的、关键的和难以理解的知识点进行了深入解析,旨在帮助读者在尽可能短的时间内以 尽可能低的学习成本去掌握那些最...