HTML5中的Canvas(径向渐变)

说明完了线性渐变,我们再来看看径向渐变,其实我觉得两者是一回事儿……只不过径向渐变的浏览器兼容性更糟糕一些(现在已经好多了),为了不出洋相,我们还是要多知道一些。

什么是径向渐变

又要解释一下什么叫径向渐变,其实就是环形的渐变了,由圆心(或者是较小的同心圆)开始向外扩散渐变的效果,听着有些抽象,往下看图一下子就明白了。线性渐变指定了起点和终点,径向渐变则指定了开始的结束园的圆心和半径。这里使用createRadialGradient来获得Canvas的CanvasGradient对象,所以addColorStop方法也是通用的。

CanvasGradient = ctx.createRadialGradient(x0, y0, r0, x1, y1, r1)
起始的圆的圆心为(x0, y0)半径为r0,终了的圆的圆心为(x1, y1)半径为r1。如果半径为负数,INDEX_SIZE_ERR异常发生,而圆心半径都相等的话,理所当然的,没有渐变效果了(相信没人会这么做的)。

的使用方法,首先是利用createRadialGradient方法指定渐变的首末圆得到CanvasGradient对象,再对这个对象使用addColorStop方法指定各个位置的颜色。最后,将CanvasGradient对象作为fillStyle使用,反正和LinearGradient一回事儿就是了。

炸面包圈……

onload = function() {
  draw();
};
function draw() {
  var canvas = document.getElementById('c1');
  if ( ! canvas || ! canvas.getContext ) { return false; }
r var ctx = canvas.getContext('2d');
  ctx.beginPath();
  /* 设定渐变区域 */
  var grad  = ctx.createRadialGradient(70,70,20,70,70,70);
  /* 设定各个位置的颜色 */
  grad.addColorStop(0,'red');
  grad.addColorStop(0.5,'yellow');
  grad.addColorStop(1,'blue');
  ctx.fillStyle = grad;
  /* 还是画一个矩形! */
  ctx.rect(0,0, 140,140);
  // ctx.arc(70,70, 70, 0, Math.PI*2);
  ctx.fill();
}

效果见左图,这个“面包圈”的中心在(70, 70)处,内部半径为20,外部半径为70。然后定义的渐变为从小圆到大圆,分别为红、黄、蓝。我们这里是画了一个矩形,但是因为填充的是圆形,所以最终效果看起来是圆的。

观察这个图片,我们能看到虽然我们是从半径20的地方开始定义的,但是20以内的颜色也是开始的红色,这样的表现是很普遍的(也就是未定义地方的颜色则沿用最近的色彩),但是记住这并不是一定的,HTML5的规范中并没有规定这些“三不管”地区应该表现成什么颜色,事实上,早期的Opera浏览器上,同样的代码的结果是下图展示的这样,也就是,它透明了~

这并不是最悲剧的,让大家感激涕零的excanvas并没有很好的支持径向渐变(我估计是VML没有这个功能的关系),所以它很可怜的圆形变成了方形…… 所以我们知道了,如果你需要在IE9一下的浏览器上使用Canvas的话,不要用径向渐变,除非你想给用户制造惊喜!

OK,关于颜色,我们就说到这里了,接下来我们得依靠别人的劳动成果了——HTML5中的Canvas(图像)

HTML5中的Canvas(线性渐变)

这一章讲解Canvas绘图中的线性渐变,不过呢,渐变的处理在各种浏览器中还略有不同,我们也会就这方面做一些说明。

什么是线性渐变

所谓线性渐变,是指从开始地点到结束地点,颜色呈直线的徐徐变化的效果。为了实现这种效果,我们绘制时必须制定开始和结束的颜色。而在Canvas中,不仅可以只指定开始和结尾的两点,中途的位置也能任意指定,所以可以实现各种奇妙的效果。

为了绘制线性渐变,我们需要使用createLinearGradient命令,这个命令可以获得一个CanvasGradient对象,使用这个对象的addColorStop方法添加颜色,就可以了。

CanvasGradient = ctx.createLinearGradient(x0, y0, x1, y1)
    渐变的开始地点(x0, y0),结束地点(x1, y1)指定后,返回线性渐变对象CanvasGradient。
    然后我们通过addColorStop方法,offset为0的地方为开始地点的颜色,offset为1的则为结束地点的颜色。另外,很明显的,x0=x1并且y0=y1的时候,不会有渐变效果出现。

CanvasGradient.addColorStop(offset, color)
    这个方法就是增加点的颜色,如果offset大于1或者小于0,会发生INDEX_SIZE_ERR异常;color可以是任何合法的CSS颜色,如果不是,则会发生SYNTAX_ERR异常。
    如果offset是指定0到1之间的值,则是对应中间的比例位置。

整个的使用方法,首先是利用createLinearGradient方法指定渐变的首末位置得到CanvasGradient对象,再对这个对象使用addColorStop方法指定各个位置的颜色。最后,将CanvasGradient对象作为fillStyle使用。当然如果是希望框线使用渐变,就将其设置到strokeStyle上去。

纵方向的线性渐变

我们来看一个具体的例子:

onload = function() {
  draw();
};
function draw() {
  var canvas = document.getElementById('c1');
  if ( ! canvas || ! canvas.getContext ) { return false; }
  var ctx = canvas.getContext('2d');
  ctx.beginPath();
  /* 指定渐变区域 */
  var grad  = ctx.createLinearGradient(0,0, 0,140);
  /* 指定几个颜色 */
  grad.addColorStop(0,'rgb(192, 80, 77)');    // 红
  grad.addColorStop(0.5,'rgb(155, 187, 89)'); // 绿
  grad.addColorStop(1,'rgb(128, 100, 162)');  // 紫
  /* 将这个渐变设置为fillStyle */
  ctx.fillStyle = grad;
  /* 绘制矩形 */
  ctx.rect(0,0, 140,140);
  ctx.fill();
  // ctx.fillRect(0,0, 140,140);
}

画完以后是这个结果:
水平线性渐变代码中的各个定义也很清楚,因为(0, 0, 0, 140)指定了一条垂直的线,所以最终效果是垂直的进行渐变,这个效果在各种浏览器中应该都是一样的。我们以前说到过,画矩形有个简便的fillRect方法,这个方法是rect方法和fill方法的组合,非常方便。这里之所以没有采用,是因为貌似在低版本的Safari下有问题(无视渐变的fillStyle,只用默认的颜色),但在最新(现在是5.2)版本下尝试过没问题了,估计很早就修复了,也就放心用吧。
阅读全文 >>

纪念RO

都说初恋时最美好的,RO是我玩的第一个也是唯一一个网游,大概就是这样一种类似的存在吧。2011年11月01日,宣布停服消息传出(虽然我是过了几天才知道的),稍稍想想不禁感慨良多。

ro仙境传说

那时候是高三毕业,高考结束整个人就像什么了一样——年轻真好啊~ 在一个同学家,给他修电脑的时候(不是盖的,从小到现在,我修的电脑的数目,浩若烟海……),偶尔拿起旁边的一张广告卡,看到了RO的宣传画,那时候好像是樱之花嫁的资料片刚开,惊为天作(主要是人物、怪物太可爱了,可怜我一五大粗汉子,对这种东西居然没啥抵抗力),当即下决心玩一下,反正闲着也是闲着。凑巧的是,高中同学uyi也对此甚有兴趣(此君为MM),总算是一开始就有认识的人,虽说第一次上手玩网游(以前只有听别人说传奇的,对于那单调的杀怪和他们执着的意志,有着深深的敬意),多少少了点寂寞感。

那时候可真是认真啊,攻略买了很多本,每一种怪物的属性、掉落的东西等都是了若指掌;每一种职业的特性、技能亦是如数家珍。幸好有月卡,否则不知道多少钱浪费在里面了。

一开始没有钱,打绿棉虫、波利和疯兔过活,那个穷的,回城要蝴蝶翅膀,好像得几百吧,从来不舍得使,一直都是找几个怪把自己打死后死回去的,虽然掉落1%经验,反正一开始也简单的很。慢慢的有些门道了,仗着血厚,到稍微高级点的地方捡垃圾,一开始是下水道,那些虫子的甲壳,负重满了回来一卖得有几千,再后来就是那个到处是枯木怪的地图(时间太久了,名字也记不真切了),捡枯木汁,一趟下来几万到手,甚至捡到了一幅木制铠甲,比自己从商店里买的好得多了,乐呵呵的穿上了。另外也暗暗的想道“那些家伙不要的垃圾都比我的好,我啥时候能这么牛?”

阅读全文 >>

用PyOpenGL叩开3D的心扉——OpenGL全解析(4)

图元

上一次,我们有了一个足够3D的程序了,虽然很漂亮,但是那个茶壶并不是我们画出来的,glut带给我们的便利而已。从现在开始我们就得自己动手丰衣足食了,为了达到这一点,我们得再了解一些OpenGL的一些知识。

如右图所示,你必须知道构成我们3D图像的最小单位,它们往往被称为图元

  • ,在OpenGL中,这是最基本的图元,比如说图中红色的那个点。
  • 线,比如左图中粉色的那根。我们可以看到,两个点定一条线,不过从一个点上可以发射出任意多的线,所以点和线的数量关系并不是确定的。
  • 多边形是最为复杂的图元,比如左图的黄色梯形。和数学中的多边形含义是一样的。

在标准OpenGL中,既然称为多边形,自然不一定是四个边,可以是任意,标准OpenGL中还有一个专门的矩形绘图函数glRect*,不过在OpenGL ES中,多边形就是指三角形,出于各种考虑,不支持更复杂的多边形。

观察左边的图像,这是一个球形,不过每一个小多边形都是平面,这么一个个的小平面,最终组成了球面。这是一个非常重要的概念,在计算机图像中,曲线和曲面是非常难表示的,真正的数学概念上的“圆”,相邻的三个点不在一条直线上,球也类似。但是如果在计算机上这么处理的话,代价太大了,所以我们总是把一个光滑的线和面分解成多个断线或小平面,就好像一个看台,远看是圆形的,但是实际上是由一块块的砖拼成的。当然这是比较一般的做法,OpenGL也有真正意义上的曲线曲面的表示方法,比如如雷贯耳的“贝塞尔曲线/面”,这个是比较高级的话题,再议。

如上图,一个球形由不同数量的平面组成时的状况,下面的数字标示围绕一周的多边形的数量,也就是上面和下面顶点发散出三角形的数量,如果给个名词的话,我们可以叫它“段”。我们可以看到,当段数为32的时候,很漂亮的球形;16的时候,还行,能分辨出这是球形;8的时候就有些丢人了;而没人会把段数为4的那个物体叫球体,叫水晶体才能接受。

绘制图元

阅读全文 >>

又是几句牢骚

十月将近尾声,那么这个2011年也差不多摇摇曳曳将要消失在历史长河里了。

美景

特别待遇,不加水印

眼见OpenGL教程第4部分奔了好久都不满意,只好不放出来,没辙只能随便放出一点唠叨,好显得这个落寞的博客虽然久无生气,却也并没有真正荒废。

刚刚看完生活大爆炸的第七集,一路笑过,这一次谢尔顿可真是卯足了劲来搞怪,精神可嘉!从第一季看到第五季,这片子着实不错——虽说披着科学外皮,时不时总穿插些青春镜头。但凡能搏人欢笑的,不管高雅低俗,总有其存在意义。推荐观看!

而10月20日,下午3:10~5:10,我度过了人生最无聊无趣无意义的两小时——那个时候我在看《画壁》。

这两天心绪不佳,许是到了情绪低潮。多年前看过的什么情绪、体力、智力按照一个固定周期轮回的概念,直至今日也颇有人气,XAMPP里自带一个页面,就是计算这东西,不知有几分真假,不过当时确实深信不疑,甚至用它来判断自己考试成绩。现在想来不觉好笑,无非是实力不足造成的信心缺失,却要用这些东西来求安慰。宛如信仰鬼神,追求前世今生,多少是对现在的自己不够有信心,才会这么想吧。自然,未知的东西,若有兴趣应该去探求而不是盲从或否定。心情嘛,多多调剂就是。

十月新番动漫作品,许是自己已垂垂老矣?竟然也提不起多少兴致仔细观摩,略扫几眼,总有“续篇可观,新作颓颓”的感觉。不说Fate、Hunter,便是Working,食梦者,乌贼娘都颇有看头,不过仍也没兴趣好好观看;观新作,居然是后宫济济,让人直道世风日下啊……自己差不多要毕业了吧~

而这些日子烦闷之余,居然看起来“仙路烟尘”,之前从未听过感觉不甚出名,着手一看居然是部佳作,虽然对修真奇幻类文字并不懂多少,不过这些年春节无事往往就会挑部有名小说打发时间,多少有些概念。这部作品,逃不出一草诸花的困局,但写的实在清新脱俗,甚好!也有不少人评价说“附庸风雅卖弄文章”,我确是相当喜欢。自然的萝卜青菜,孰优孰劣,倒也不必计较了,自己喜欢便好。
追加:看到后来,实际是披着修真的言情么,最后的大战也颇显唐突了……罢了罢了
再追记:后来是草草扫过了,扫完了感觉这种东西,应该算有些“狗血”吧……虽然总体还好,但前半部分的感觉后面再也找不到了。

上古卷轴是部好游戏,当年4就谋杀了我不少业余时间。最近看到5的真人预告片,真是颇有气势,另外《上古卷轴5:天际》将在2011年11月11日登陆,这好日子,让人感觉相当戚戚。。。玩么?不玩么?机器恐怕都带不动了啊,哎!

还有些话……博客毕竟不同日记,多少还是有些顾虑的,若是隐藏了,岂不是又失去博客的价值,就此止住吧。

用PyOpenGL叩开3D的心扉——OpenGL全解析(3)

第一个PyOpenGL程序

说实话我们OpenGL的基础还远远没有学完,不过我在说下去大概就不会有人看了,所以,虽然稍稍有些早,开始我们的第一个程序吧。

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

def drawFunc():
    glClear(GL_COLOR_BUFFER_BIT)
    #glRotatef(1, 0, 1, 0)
    glutWireTeapot(0.5)
    glFlush()

glutInit()
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
glutInitWindowSize(400, 400)
glutCreateWindow("First")
glutDisplayFunc(drawFunc)
#glutIdleFunc(drawFunc)
glutMainLoop()

结果如上图,虽然很短,相信这里面很多函数大家会觉得陌生,不要紧,这些代码是每个程序中都需要的,基本看两个就OK了,下面来详细说明一下。

阅读全文 >>

用PyOpenGL叩开3D的心扉——OpenGL全解析(2)

每个人都有做3D的潜质

看看这张图片(选自“一秒钟看穿统计陷阱”),美国木匠的平均收入是罗坦提亚木匠的两倍,给出一张统计图片,美国人的钱袋长、高都是罗坦提亚木匠的两倍,看起来挺忠实于数据。

但是右边钱袋实际占用的面积就是左边的4倍。这幅图像导致的暗示效果其实还没完,因为在生活中钱袋都是立体的,所以每个读者看到这个钱袋的时候会不经意地给它加上一个厚度,这样一来,在有些人眼里这幅图表达的明明是美国木匠的收入是罗坦提亚的8倍。原文的意思是这样的印象完全脱离了原始数据所给出的信息,无疑是一次成功的误导(它说的很对!)。

只要你被误导了,无意识的加上了一个厚度,你就拥有了做3D的基本条件了。既然被广泛的使用,可见被大众的3D感是如何的强烈!你一定是其中之一么?

人有两只眼睛,就是为了看立体景象的,自然进化的结果都告诉我们要好好用3D啊。为什么两只眼睛是3D?难道单眼看世界就成平面了?!我闭上一只眼睛——骗子,还是立体的啊,你耍我么?

岂敢岂敢,现在闭上一只眼睛,拿根缝衣针来试着穿一下?失败了吧!没有缝衣针的话简单一点随便走走能很容易的用手从侧面一下子抓到眼前的东西么?失败了吧!不要气馁,这些只是说明你是个正常人。

- – - – 自然给了我们清澈的双眸,我们却用它来发现距离。- – - –

我们能感受到距离,是因为左右两眼看到的事物是不同的,这样的不同反馈到我们的大脑,大脑就把它合成立体的图像,不仅包含左右的距离,还有前后的距离,太神奇了!

计算机上的3D

有些计算机历史知识的,会知道最早的计算机是把结果打在纸带上的,富有艺术力的程序员就在纸带上靠编程打印一系列的*来形成图像,如果你从基础开始学习C语言,很可能就会在学习循环的章节的习题上看到类似的习题。当然纸张表现的艺术,总有些不够cool,而且,是对森林资源的浪费不是么……

于是显示器被发明出来了,与纸不同的是,可以无穷的复用,速度超快,不过新发明总是基于老的东西的,显示器与纸面一样,都是显示二维的图像的,从一开始就是如此,到现在都是,未来嘛……有变化的趋势。

希望你中学的时候有听过美术课,或者,立体几何课上有稍微努力过,如果这也没有,那就发挥一下自己的观察能力吧,看看眼前的任何东西吧,然后默念并感悟这句毁天灭地惊天地泣鬼神的无敌真言——“近大远小”,如何,得道了么?

看看那些艺术绘画作品,人类大概几千年前就明白了这个道理:

2D + 透视 = 3D

上图,顶天立地如假包换的平面图,但是你看到了什么?立体方块是吧。

阅读全文 >>

用PyOpenGL叩开3D的心扉——OpenGL全解析(1)

从pygame的系列教程里3D部分,本想好好说一下OpenGL的,但是感觉这样一来就喧宾夺主了,毕竟OpenGL这东西,好好说明下来要比pygame更加博大精深,所以就考虑另外起一个教程来写着了。如今pygame的说明基本完成,实战篇完成两个以后,第三个写起来实在太占时间了,只好退居二线新开这个pyopengl教程作为主要的更新内容。

说实话我不知道这次会写多久,能写的如何,我只能保证自己极力而为。

大凡经典和妄图冒充经典的大段文字,总要在开头从维基啊XX百科那里抄一段历史的,免俗……还是不要了吧,请选择性参阅下面的文字,感谢计算机赋予我们的复制粘贴伟大神器。

OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口(Application programming interface)的规格,它用于生成二维、三维图像。这个接口由近三百五十个不同的函数调用组成,用来从简单的图元绘制复杂的三维景象。OpenGL常用于CAD、虚拟实境、科学可视化程式和电子游戏开发。

OpenGL的高效实现(利用了图形加速硬件)存在于Windows,很多UNIX平台和MacOS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。详细→

然后,PyOpenGL自然就是OpenGL在Python中的调用咯~还用说吗?

上面的图片,左边是OpenGL的图标,右边么,加上个小蛇,想想就是和Python有关,就是PyOpenGL的图标了,好像有些简陋啊……

OpenGL最初是用C写的,所以做OpenGL开发,说实话C/C++是最合适的,效率是最佳的。我一开始也考虑是不是不用Python,就算用Java,可能效率上也能高一些。不过再考虑,首先这是从上一个教程继承来的,换一个语言好像有点不合适;而且用C语言写的话,可能就是工作中使用OpenGL了,基本都是高手了,何必来看我这教程呢~所以还是用Python吧,入门用,思想是主要的,不要让语言本身再给我们带来什么麻烦了。

说到OpenGL的作品,首先想到的自然游戏程序员中神一般存在卡马克写的传世经典 “DOOM” 和 “QUAKE”,说实话用OpenGL做的有名游戏,还真不多,因为它不仅仅用在游戏上,还有大量的软件工具。所以我这次也就不好说用PyOpenGL开发游戏了,只是3D,至于这个3D用来做什么,完全看您自己的兴趣。

为什么要写OpenGL的教程?如果您稍微查一下,会知道当今世界,最有名的OpenGL入门教程当属NeHe的作品,然后周炜的NeHe中文教程基本就算是咱们中国人看的标准了,他们很伟大,应该说写的也很有水准。但是有个问题,我看不懂……

就看第一篇入门教程,先不说一大堆的导入库,窗口程序结构,这里三句代码:

	glClearDepth(1.0f);			// 设置深度缓存
	glEnable(GL_DEPTH_TEST);		// 启用深度测试
	glDepthFunc(GL_LEQUAL);			// 所作深度测试的类型

虽然每一句代码都有注释,但是一个初学OpenGL的人真能看到这些注释么?什么是深度缓存?什么叫深度测试?就好像一个不懂英语的老司机突然来了兴致问你什么是ABS,然后你回答“就是Anti-locked Braking System”,这不打击人么,估计回答一句“哦”就去忙其他事情了……

我想写一个有一定的编程知识的人就能看懂的OpenGL教程,你可以不需要有图像编程经验,不需要明白透视、光线原理,不需要懂C/C++,可以不懂矩阵,我会在适合的时候讲解;你甚至可以不懂Python(但是想实践的画,还是学一下吧,有点编程基础的半天学会,没有的三五天也可以入门了),Python在这里只是载体,核心的知识超越语言而存在,不过我大概不会回答Python相关的问题,需要的话请自己学习,资料太多了。

但你应该玩过游戏,或用过3D软件,一看游戏画面知道是2D还是3D的,至少明白任意一种编程语言,还有,而且是最重要的,你要有足够的热忱与信心。That’s not all, but enough!

作为第一篇是不是有些短了?就当序吧,星星之火,可以燎原:)

几片断想

国庆佳节已过,愿意或不愿意,总是要回来的——虽然对我而言没太大的区别。

两天前的扬子晚报,头版标题是“前天醒来,IPhone 5没了;昨天醒来,乔布斯没了;明天醒来,国庆节没了”,配一幅老乔的背影图,多少有些让人唏嘘,而翻开一看,居然用了整整5个版面报导了乔帮主的今世前生(哦,好像没有前生的消息),估计国家领导人仙逝都没这样的优待,不禁感叹:这个世界,不管如何时过境迁,永远是英雄的年代啊。

当然,其实他与大多数人都毫无瓜葛。

 

突然想到,高中光顾了学习,大学光顾了玩,到头来什么都没有~ 再来一遍已经是不可能,而现在,感觉又是无论多么努力,都抓不到一丝一缕。

 

国庆最后一天晚上瞄到国庆七天乐主持人歌手大赛,有一位……名字忘了,出来唱“送别”,就是那首“长亭外,古道边”的,不禁心念一动,不是说唱的有多好,只是又想到了自己的祖父。

祖父是文雅的说法,从来都是叫爷爷的。

爷爷是个文化人,书读的很多,道理自然也懂很多,而且写一手好字,感觉比之自己练习的毛笔字帖也不逞多让。有人刻碑,都会叫爷爷去写,然后再由石匠把字雕出来,报酬嘛,一支烟~ 那个年纪的读书人,或多或少遭遇过一些事情的,不过我从没从爷爷那里听来一星半点,偶尔奶奶会很揪心的说几句,但那时也没有什么概念。

初中的时候,学校音乐课人手一支竖笛,价格便宜量又足吧,那时候也挺有兴趣的,每晚都要吹上一会儿。不过现在是完全不记得了,十年足以彻底抹杀那些不纯熟的技艺了。不过我记得,爷爷有一次听我生疏的吹过“送别”后,就把笛子拿了过去,尽管见到我吹的样子,一开始还是连位置都不明白,还想当横笛放在嘴边,但是接下来一首纯熟的“送别”让我目瞪口呆,再下来是“苏武牧羊”,完全没有看谱子,我简直不敢相信,即使到现在回忆起来我都感觉不可思议。那么多年了,从来没有见过爷爷吹笛子,指法都完全不曾生疏过吗?完全不敢想象,这些曲子,爷爷小时候吹过多少遍,也第一次认识到,我对自己祖父的认识,到底才深入到几分?

 

偶尔在VeryCD上看到布雷斯塔警长的片子,怀念啊,原来是87年出的作品,小时候是非常喜欢吧,每晚看的那个是津津有味,开头的几句台词可是倒背如流,还有那只马变身成“直立行走”然后拿出那杆“撒拉囧”,美好回忆啊。当一个人开始回忆过去的时候,说明他已经老了……

 

这里曾经还有一些字……,删了

[转]我们每天都理性地作出非理性选择

这篇文章转自葡挞生活,一直觉得心理学非常有意思,尤其是感到它说的和我自己的判断相吻合的时候,总是忍不住拍案叫绝!

记得小时候,看到一篇文章,具体条件忘了,总之算下来“我有很强的心理透视能力”,忍不住暗暗高兴。与一个同学说了以后,他很是不屑的说“那你猜猜我现在在想什么?”,我看了他两眼后说“你在骂我”,那孩子大惊失色,忍不住说“那我在骂你什么?”,这个可实在猜不出来了……中国话里骂人的词句可是浩若烟海,不管如何,小时候建立的兴趣,影响是很大的。
————————————————————————-

这里想对最近读的一本书写个书评,这本书名字叫《决策与判断》:

image

请你把这本书封面上的扑克牌数字读出来。什么?5 A 7 5 3 ? 再仔细看看?

我是在作者的提示下才看出其中蹊跷的,3那张牌根本不是黑桃。其实我们的知觉已经被大脑形成的印象所掩盖,大脑已经认为那是个黑桃三,那么具体黑桃的形状便被“视而不见”了。在布鲁纳和波斯特曼的实验中,28个被试中有27个人(即96%的人)在一定程度上表现出这种支配反应。这种现象在科学上称之为选择性知觉,用沃尔特李普曼的话说就是“我们不是先看见再定义,而是先定义再看见。” 我们老是会看见自己预期会出现的事物,并且认为那个理所当然,但是往往事实并非如此。再举个例子,世界杯上两个国家队比赛,可能互有小动作和犯规。但是当你赛后让两方的球迷写下对方的犯规次数时候,结果肯定大相径庭。知觉本质就具有选择性,即便是一张扑克牌。

看了上面的例子,我想你对这本书大致有了点感觉。作者用六个部分,二十一章来讲述人们在日常决策和判断时候的一些出人意料的现象,并且介绍了其中理论。作者引用大量翔实的科学实验。全书非常严谨,有点学院派的感觉,但是读来又不会觉得很枯燥。(书后面的参考资料长达30页)

说下其中我比较有感触的理论吧,相信你也会有同感。

1. 人们总是选择性的记忆。比较美好的东西更容易被记住,而痛苦的东西则更容易被遗忘。

2. 晕轮效应。

如果一个mm聪明漂亮、善良大方、说话柔声细语。那么大多数人会相信倾向于在其他方面也都会不错,比如做饭应该很好吃(当然你也可以发挥想象其他方面)。虽然这可能毫无关系。

3. 问题不变,提问的方式变化也许会影响答案。

比如给你两个选项:A 100%的概率输掉¥50; B 25%的概率输掉¥200  ¥75的概率什么都不会输掉。大多数人会选择B,虽然这两种选择的数学期望其实是一样的。在面临损失时候,人们往往愿意冒风险去承受更大的损失。虽然有的时候这种选择是非理性的。(想想那些股票损失了,却不肯及时抽身出来的股民吧。或者想想那些在赌桌上亏了大本,却还要压大赌注想翻盘的赌鬼们。)另一个实验是给你三个选项 ABC  当选项的顺序不同,比如下次是BCA ACB时候 你会发现同样的问题 人们对于选三个选项的比例也是不同的(最后一个总是比较多些)。这一点在我们设计调查问卷时候最好考虑到。用作者的话说:“如果结果在经过了多种程序的测试之后依然是一致的,那么我们就有理由相信这些判断;如果不是,就需要更进一步的分析”。同志们,这才叫科学的态度!

4. 期望效用理论。

阅读全文 >>