Wednesday, June 30, 2010
红楼梦魇 天上人间–《红楼梦》新时代的抽象片
根叔,你该回家吃饭了
既见新人笑,又见旧人哭
上周,我的母校举行了毕业典礼,这意味着又一届的毕业生离开了学校,新一届的学生也即将走进校园。
《Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb》
上海SB会(八)–排队排队
Audrey Hepburn
Monday, June 28, 2010
《American Beauty》
对于大多数人来说,去讨论所谓生活和人生的意义是没有意义的,因为他们的生活和人生本就没有任何的意义,他们在做的,只是沿着一条通向死亡的道路,跌跌撞撞,懵懵懂懂的走着,偶尔停下看看风景,开心一会,接着再走。或者说,人生与生活本来就没有意义,是你让他们有了意义。无论是“Don't Ask,Don't Say”的军中猛男gay,强装放荡的处女,有婚姻之名无婚姻之实的中年夫妻,性格叛逆乖张的少女,每个人其实都在追求着什么,可是每个人又都被束缚着。那些看似快乐的,幸福的,美好的,有序的面具下面,有着不能被他人所道的困倦,迷茫,无助。每个看似柔弱的外表下面都隐藏着一颗猛兽一样的心,渴望着被释放。
还是别向那流浪的白云说声我想你,对着天空大喊草泥马吧。
上海SB会(七)--印章坏了
墙内地址http://www.jdxyw.com/?p=790
中国人有很深厚的盖章情节,这是外国人难以理解的。八十年代的时候,有个相声剧,一个出差在外的人,为了吃上一碗面条,填写了无数的表格,盖了无数的章,最后在离开的时候终于吃上了那碗面条。九十年代,牛群和冯巩的《小偷公司》,小偷们倒是不盖章了,流行画圈了,最后画成了奥运会。前几年,还有个新闻,为了建一个棚屋,全市从土地局到卫生局,从消防队到城建局,从居委会到派出所,花了一年多时间,盖了三十多个章,棚屋还是没有建成。
当丹麦的漂亮MM在接受采访的时候,对于中国游客只盖章,却对丹麦的历史文化毫无兴趣表示遗憾的时候,一本盖满章的所谓“世博护照”炒到了数千元。哦,漂亮的MM,不要这么认真,他们连自己的文化都不感兴趣,何况是丹麦呢?你认真了,美好的事物还是留给那些会欣赏的人吧,放在中国太浪费了。
翠花,上两盘印章,要清蒸的。
裁判又抢戏了
墙内地址http://www.jdxyw.com/?p=786
昨天晚上的两场比赛,德国-英格兰与阿根廷-墨西哥,裁判又成功的抢戏了,特别是英格兰的那个进球,让各种消息,谣言,愤怒,悲哀满天飞,各种外媒一致对这个过了球门线50里的皮球,感慨而又愤怒。就连中国足球也可以插上两脚,鄙视一下FIFA的裁判。而随之引起的就是另外一个声音,就是鹰眼的使用。
作为一名彻头彻尾的伪球迷,只是因为对德国这个国家的喜爱,继而爱屋及乌凑着热闹看比赛。引入鹰眼,对于比赛双方都是一件公平的事情。就拿这场比赛来说。英格兰队就不会因为这个球而受到影响,而德国队也不会因为这个球而使得这场胜利显得成色不足。但是从另外一方面来讲,就是因为了这个进球,造福了多少的记者,编辑,评论员,专栏作家,博客名人。给了球迷无数的谈资,而这个谈资将会像老马的“上帝之手”一样,不断的被人谈起,消磨多少无聊的时光。
《老饕漫笔》–笔墨间的珍馐
墙内地址http://www.jdxyw.com/?p=782
想做一名美食家,并不是一件容易的事情,这不仅仅是吃这么简单。这意味着,你要有灵敏的味觉,过人的嗅觉,以及为了吃上一盘你认为可以让你食指大动的珍馐美味而不畏艰难险阻的勇气与毅力,有的时候,还与你的财力密切相关着。还有的时候,你需要有那么一点点的运气。
中华的美食,算是中华文化中的精华部分了。从南至北,由西到东。华夏民众们用少有的热情与毅力,创造出各种各样令人瞠目结舌的美食。我们说美食,当然有满汉全席般的宏大场面,就如同相声演员们每人必会的贯口–报菜名–一般。当然也有像你家巷口那家不足二十平米的小店所卖的羊杂汤。既有那种位于庙堂之上的珍馐,也有隐于胡同小巷的美食。
我只是一名美食的臆想者,既没有雄厚的财力,可以让私人飞机运来天南海北的新鲜食材,聘请某代的传人,为我细心烹制一番。我也无此心力,为了寻求传说中的一碗鸡粥或是一盘爆肚,走上数个街区,穿过数条小巷。我能吃的,只是碰上什么吃什么。余下的,只不过是在笔墨中,寻找那眼前并不存在的珍馐。
Monday, June 21, 2010
Convex hull algorithm
In computational geometry, a basic problem is finding the convex hull for a given finite nonempty set of points in the plane. You will meet this problem in Collision detection,Visual pattern matching,Mapping,image processing, statistics and GIS. For the definition about the convex hull,you can refer the page on the wikipedia.
There are already a lot of algorithms to construct a convex hull from a given finite set of points in a plan, such as Jarvis march, Graham scan, Divide and conquer, Optimal output-sensitive algorithms . Here I will use the Graham scan published in 1972 (O(n log n) time complexity). If the points are already sorted by one of the coordinates or by the angle to a fixed vector, then the algorithm takes O(n) time.
When I am learning the algorithms about the convex hull, I found an excellent article written by Mark Nelson. I would use some materials from that article.
Process of the Graham scan algorithm (Refer to Mark Nelson's article)
Sort all points in S based on their position on the X axis
Designate point left as the leftmost point
Designate point right as the rightmost point
Remove left and right from S
While there are still points in S
remove Point from S
if Point is above the line from left to right
add Point to the end of array upper
else
add Point to the end of array lower
Add left to lower_hull
While lower is not empty
add lower[0] to the end of lower_hull
remove lower[0] from lower
while size(lower_hull >= 3 and the last 3 points lower_hull are not convex
remove the next to last element from lower_hull
Add left to upper_hull
While upper is not empty
add upper[0] to the end of upper_hull
remove upper[0] from upper
while size(upper_hull >= 3 and the last 3 points upper_hull are not convex
remove the next to last element from upper_hull
Merge upper_hull and lower_hull to form hull
return hull
Below is my implementation for constructing a convex bull. I get all the lower hull points and upper hull points. But I does not merge them.
{
public:
Point(int _x,int _y)
:x(_x),y(_y)
{}
int x,y;
friend bool operator<(const Point &p1,const Point &p2)
{
return p1.x
<0)
return true;
else
return false;
}
bool pointLowerLine(Point p1,Point p2,Point p3)
{
int deltaX=p3.x-p1.x;
int deltaY=p3.y-p1.y;
if(((deltaY/deltaX)*(p2.x-p1.x)+(p1.y-p2.y))>0)
return true;
else
return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
ifstream in(".\\data.txt");
int numPoint;
in>>numPoint;
vector points;
for(int i=0;i>x>>y;
points.push_back(Point(x,y));
}
in.close();
sort(points.begin(),points.end());
Point minPoint=points.front();
Point maxPoint=points.back();
vector upperPoint;
vector lowerPoint;
vector upperHull;
vector lowerHull;
int deltaX=maxPoint.x-minPoint.x;
int deltaY=maxPoint.y-minPoint.y;
for(int i=1;i<0)
upperPoint.push_back(p);
else if(((deltaY/deltaX)*(p.x-minPoint.x)+(minPoint.y-p.y))>0)
lowerPoint.push_back(p);
}
upperPoint.push_back(maxPoint);
lowerPoint.push_back(maxPoint);
upperHull.push_back(minPoint);
lowerHull.push_back(minPoint);
for(int i=0;i=3 && pointLowerLine(upperHull[size-3],upperHull[size-2],upperHull[size-1]))
{
vector::iterator it=upperHull.begin();
it+=(size-2);
upperHull.erase(it);
size=upperHull.size();
}
}
for(int i=0;i=3 && pointUpperLine(lowerHull[size-3],lowerHull[size-2],lowerHull[size-1]))
{
vector::iterator it=lowerHull.begin();
it+=(size-2);
lowerHull.erase(it);
size=lowerHull.size();
}
}
system("pause");
return 0;
}