代码改变世界

JavaScript&Canvas绘图的一些个人经验--阴影和内阴影等

2012-09-09 01:40 by 南乡的木匠, 3152 阅读, 0 推荐, 收藏,
摘要:这篇文章源自实习时总结的一点使用JavaScript&Canvas绘图时的经验。原文用不怎么通顺的英文写成,懒得全文翻译了,就关键地方加了中文,配图和代码大家应该可以看懂。先展示一下最终的效果图: lineWidth绘制线时,线的宽度沿着中心向两边各扩展一半。请仔细看例图颜色的overlap。The 'lineWidth' expends to both sides of the path. It matters in two ways. First, we have to take this in account if we need exactly control 阅读全文

swap:不使用中间变量,交换两个a、b两个变量

2012-04-16 23:40 by 南乡的木匠, 1056 阅读, 1 推荐, 收藏,
摘要:“写一个swap函数,要求不使用中间变量,交换a、b两个变量的值”,应该算是老生常谈了。但今天却碰到一点新问题。今天阅读《程序员的自我修养--链接、装载与库》,P98有一小段示例代码:void swap(int *a, int *b){ *a ^= *b ^= *a ^= *b;}我觉得用一行代码来实现交换a与b的值,还是很简洁的。于是顺手发给了一个朋友。结果朋友说,这个函数的执行出现了问题。// File: swap.c#includ <stdio.h>void swap(int *a, int *b){ *a ^= *b ^= *a ^= *b;}int mai... 阅读全文

使用vector建立动态二维数组

2011-05-02 13:31 by 南乡的木匠, 614 阅读, 0 推荐, 收藏,
摘要:在用动态规划的方法解决问题时,经常需要使用动态大小的二维数组。我原来是使用一维数组模仿二维数组,例如定一个ROW行COLUMN列的数组:int *arr = (int *) malloc(ROW * COLUMN * sizeof(int));或者int *arr = new int[ROW * COLUMN];要访问第i行第j列就用arr[i * COLUMN + j]。虽然可以将就着用,但写的时候总不及arr[i][j]简介明了,使用完还要释放掉arr。并且在出错的时候,例如越界访问,并没有明显地提示。当代码中到处充斥这诸如i * COLUMN + j之类到句子,并且时不时地越界访问地时候 阅读全文

《算法导论》翻译中的一个问题

2011-05-01 10:17 by 南乡的木匠, 297 阅读, 0 推荐, 收藏,
摘要:将英文句子翻译成中文,经常需要调整一些语序。但并不是每个英文句子翻译成中文都是需要调整到。下面是算法导论中到的一句话: “贪心算法对大多数最优问题来说能产生最优解,但也不一定总是这样。在16.1节中,要首先看一个简单而不可轻视的问题......” --《算法导论》第二版 中文版 P222 我想,对于每个以中文为母语到人来说,自然而然地就会推断“在16.1节...”一句应该是贪心算法不能产生最优解的一个例子。然后大多数人会带着这样的想法继续往下读。但等整个一段都读完,你就会发现,原来这句是贪心算法可以产生最优解到例子! 让我们来看看英文原文吧: “Greedy algorithms do no. 阅读全文

I Believe In Man

2011-04-30 22:46 by 南乡的木匠, 233 阅读, 0 推荐, 收藏,
摘要:估计很多人小时候和我一样,有一个模糊到梦想,那就是:我长大了要当一个科学家。如果特别有自信到孩子可能还会在“科学家”前面加一个重重到“大”字,虽然我们一直不知道科学家每天到具体工作是怎样的,但依然有一股莫名到渴望。直到自己一天天慢慢又飞快地长大,成了一个伪愤青,认为整个中国也没几个所谓到科学家,虽然可以成为一个所谓到“专家”,但已经不屑为之了。但仍希望自己可以在自己的领域里面成为一个大牛,即使意识到自己还只是一个小菜鸟。总而言之,我们都不认为我们自己会成为那么多庸庸碌碌到小人物中的一员。 我是个不相信命运到人。可是,经过了一些事,使得我突然意识到,自己是并且可能以后会一直是一个再平凡不过的人. 阅读全文