程序员必须掌握的600个单词


application 应用程式 应用、应用程序 
application framework 应用程式框架、应用框架 应用程序框架 
architecture 架构、系统架构 体系结构 
argument 引数(传给函式的值)。叁见 parameter 叁数、实质叁数、实叁、自变量 
array 阵列 数组 
arrow operator arrow(箭头)运算子 箭头操作符 
assembly 装配件 
assembly language 组合语言 汇编语言 
assert(ion) 断言 
assign 指派、指定、设值、赋值 赋值 
assignment 指派、指定 赋值、分配 
assignment operator 指派(赋值)运算子 = 赋值操作符 
associated 相应的、相关的 相关的、关联、相应的 
associative container 关联式容器(对应 sequential container) 关联式容器 
atomic 不可分割的 原子的 
attribute 属性 属性、特性 
audio 音讯 音频 
A.I. 人工智慧 人工智能 
background 背景 背景(用於图形着色) 
后台(用於行程) 
backward compatible 回溯相容 向下兼容 
bandwidth 频宽 带宽 
base class 基础类别 基类 
base type 基础型别 (等同於 base class) 
batch 批次(意思是整批作业) 批处理 
benefit 利益 收益 
best viable function 最佳可行函式 最佳可行函式 
(从 viable functions 中挑出的最佳吻合者) 
binary search 二分搜寻法 二分查找 
binary tree 二元树 二叉树 
binary function 二元函式 双叁函数 
binary operator 二元运算子 二元操作符 
binding 系结 绑定 
bit 位元 位 
bit field 位元栏 位域 
bitmap 位元图 位图 
bitwise 以 bit 为单元逐一┅ 
bitwise copy 以 bit 为单元进行复制;位元逐一复制 位拷贝 
block 区块,区段 块、区块、语句块 
boolean 布林值(真假值,true 或 false) 布尔值 
border 边框、框线 边框 
brace(curly brace) 大括弧、大括号 花括弧、花括号 
bracket(square brakcet) 中括弧、中括号 方括弧、方括号 
breakpoint 中断点 断点 
build 建造、构筑、建置(MS 用语) 
build-in 内建 内置 
bus 汇流排 总线 
business 商务,业务 业务 
buttons 按钮 按钮 
byte 位元组(由 8 bits 组成) 字节 
cache 快取 高速缓存 
call 呼叫、叫用 调用 
callback 回呼 回调 
call operator call(函式呼叫)运算子调用操作符 
(同 function call operator) 
candidate function 候选函式 候选函数 
(在函式多载决议程序中出现的候选函式) 
chain 串链(例 chain of function calls) 链 
character 字元 字符 
check box 核取方块 (i.e. check button) 复选框 
checked exception 可控式异常(Java) 
check button 方钮 (i.e. check box) 复选按钮 
child class 子类别(或称为derived class, subtype) 子类 
class 类别 类 
class body 类别本体 类体 
class declaration 类别宣告、类别宣告式 类声明 
class definition 类别定义、类别定义式 类定义 
class derivation list 类别衍化列 类继承列表 
class head 类别表头 类头 
class hierarchy 类别继承体系, 类别阶层 类层次体系 
class library 类别程式库、类别库 类库 
class template 类别模板、类别范本 类模板 
class template partial specializations 
类别模板偏特化 类模板部分特化 
class template specializations 
类别模板特化 类模板特化 
cleanup 清理、善后 清理、清除 
client 客端、客户端、客户 客户 
client-server 主从架构 客户/服务器 
clipboard 剪贴簿 剪贴板 
clone 复制 克隆 
collection 群集 集合 
combo box 复合方块、复合框 组合框 
command line 命令列 命令行 
(系统文字模式下的整行执行命令) 
communication 通讯 通讯 
compatible 相容 兼容 
compile time 编译期 编译期、编译时 
compiler 编译器 编译器 
component 组件 组件 
composition 复合、合成、组合 组合 
computer 电脑、计算机 计算机、电脑 
concept 概念 概念 
concrete 具象的 实在的 
concurrent 并行 并发 
configuration 组态 配置 
connection 连接,连线(网络,资料库) 连接 
constraint 约束(条件) 
construct 构件 构件 
container 容器 容器 
(存放资料的某种结构如 list, vector...) 
containment 内含 包容 
context 背景关系、周遭环境、上下脉络 环境、上下文 
control 控制元件、控件 控件 
console 主控台 控制台 
const 常数(constant 的缩写,C++ 关键字) 
constant 常数(相对於 variable) 常量 
constructor(ctor) 建构式 构造函数 
(与class 同名的一种 member functions) 
copy (v) 复制、拷贝 拷贝 
copy (n) 复件, 副本 
cover 涵盖 覆盖 
create 创建、建立、产生、生成 创建 
creation 产生、生成 创建 
cursor 游标 光标 
custom 订制、自定 定制 
data 资料 数据 
database 资料库 数据库 
database schema 数据库结构纲目 
data member 资料成员、成员变数 数据成员、成员变量 
data structure 资料结构 数据结构 
datagram 资料元 数据报文 
dead lock 死结 死锁 
debug 除错 调试 
debugger 除错器 调试器 
declaration 宣告、宣告式 声明 
deduction 推导(例:template argument deduction) 推导、推断 
default 预设 缺省、默认 
defer 延缓 推迟 
define 定义 预定义
definition 定义、定义区、定义式 定义 
delegate 委派、委托、委任 委托 
delegation (同上) 
demarshal 反编列 散集 
dereference 提领(取出指标所指物体的内容) 解叁考 
dereference operator dereference(提领)运算子 * 解叁考操作符 
derived class 衍生类别 派生类 
design by contract 契约式设计 
design pattern 设计范式、设计样式 设计模式 
※ 最近我比较喜欢「设计范式」一词 
destroy 摧毁、销毁 
destructor 解构式 析构函数 
device 装置、设备 设备 
dialog 对话窗、对话盒 对话框 
directive 指令(例:using directive) (编译)指示符 
directory 目录 目录 
disk 碟 盘 
dispatch 分派 分派 
distributed computing 分布式计算 (分布式电算) 分布式计算 
分散式计算 (分散式电算) 
document 文件 文档 
dot operator dot(句点)运算子 . (圆)点操作符 
driver 驱动程式 驱动(程序) 
dynamic binding 动态系结 动态绑定 
efficiency 效率 效率 
efficient 高效 高效 
end user 终端用户 
entity 物体 实体、物体 
encapsulation 封装 封装 
enclosing class 外围类别(与巢状类别 nested class 有关)外围类 
enum (enumeration) 列举(一种 C++ 资料型别) 枚举 
enumerators 列举元(enum 型别中的成员) 枚举成员、枚举器 
equal 相等 相等 
equality 相等性 相等性 
equality operator equality(等号)运算子 == 等号操作符 
equivalence 等价性、等同性、对等性 等价性 
equivalent 等价、等同、对等 等价 
escape code 转义码 转义码 
evaluate 评估、求值、核定 评估 
event 事件 事件 
event driven 事件驱动的 事件驱动的 
exception 异常情况 异常 
exception declaration 异常宣告(ref. C++ Primer 3/e, 11.3) 异常声明 
exception handling 异常处理、异常处理机制 异常处理、异常处理机制 
exception specification 异常规格(ref. C++ Primer 3/e, 11.4) 异常规范 
exit 退离(指离开函式时的那一个执行点) 退出 
explicit 明白的、明显的、显式 显式 
export 汇出 引出、导出 
expression 运算式、算式 表达式 
facility 设施、设备 设施、设备 
feature 特性 
field 栏位,资料栏(Java) 字段, 值域(Java) 
file 档案 文件 
firmware 韧体 固件 
flag 旗标 标记 
flash memory 快闪记忆体 闪存 
flexibility 弹性 灵活性 
flush 清理、扫清 刷新 
font 字型 字体 
form 表单(programming 用语) 窗体 
formal parameter 形式叁数 形式叁数 
forward declaration 前置宣告 前置声明 
forwarding 转呼叫,转发 转发 
forwarding function 转呼叫函式,转发函式 转发函数 
fractal 碎形 分形 
framework 框架 框架 
full specialization 全特化(ref. partial specialization) 
function 函式、函数 函数 
function call operator 同 call operator 
function object 函式物件(ref. C++ Primer 3/e, 12.3) 函数对象 
function overloaded resolution 
函式多载决议程序 函数重载解决(方案) 
functionality 功能、机能 功能 
function template 函式模板、函式范本 函数模板 
functor 仿函式 仿函式、函子 
game 游戏 游戏 
generate 生成 
generic 泛型、一般化的 一般化的、通用的、泛化 
generic algorithm 泛型演算法 通用算法 
getter (相对於 setter) 取值函式 
global 全域的(对应於 local) 全局的 
global object 全域物件 全局对象 
global scope resolution operator 
全域生存空间(范围决议)运算子 :: 全局范围解析操作符 
group 群组 
group box 群组方块 分组框 
guard clause 卫述句 (Refactoring, p250) 卫语句 
GUI 图形介面 图形界面 
hand shaking 握手协商 
handle 识别码、识别号、号码牌、权柄 句柄 
handler 处理常式 处理函数 
hard-coded 编死的 硬编码的 
hard-copy 硬拷图 屏幕截图 
hard disk 硬碟 硬盘 
hardware 硬体 硬件 
hash table 杂凑表 哈希表、散列表 
header file 表头档、标头档 头文件 
heap 堆积 堆 
hierarchy 阶层体系 层次结构(体系) 
hook 挂钩 钩子 
hyperlink 超链结 超链接 
icon 图示、图标 图标 
IDE 整合开发环境 集成开发环境 
identifier 识别字、识别符号 标识符 
if and only if 若且唯若 当且仅当 
Illinois 伊利诺 伊利诺斯 
image 影像 图象 
immediate base 直接的(紧临的)上层 base class。 直接上层基类 
immediate derived 直接的(紧临的)下层 derived class。 直接下层派生类 
immutability 不变性 
immutable 不可变(的) 
implement 实作、实现 实现 
implementation 实作品、实作体、实作码、实件 实现 
implicit 隐喻的、暗自的、隐式 隐式 
import 汇入 导入 
increment operator 累加运算子 ++ 增加操作符 
infinite loop 无穷回圈 无限循环 
infinite recursive 无穷递回 无限递归 
information 资讯 信息 
infrastructure 公共基础建设 
inheritance 继承、继承机制 继承、继承机制 
inline 行内 内联 
inline expansion 行内展开 内联展开 
initialization 初始化(动作) 初始化 
initialization list 初值列 初始值列表 
initialize 初始化 初始化 
inner class 内隐类别 内嵌类 
instance 实体 实例 
(根据某种表述而实际产生的「东西」) 
instantiated 具现化、实体化(常应用於 template) 实例化 
instantiation 具现体、具现化实体(常应用於 template) 实例 
integer (integral) 整数(的) 整型(的) 
integrate 整合 集成 
interacts 交谈、互动 交互 
interface 介面 接口 
for GUI 介面 界面 
interpreter 直译器 解释器 
invariants 恒常性,约束条件 约束条件 
invoke 唤起 调用 
iterate 迭代(回圈一个轮回一个轮回地进行) 迭代 
exception 异常情况 异常 
exception declaration 异常宣告(ref. C++ Primer 3/e, 11.3) 异常声明 
exception handling 异常处理、异常处理机制 异常处理、异常处理机制 
exception specification 异常规格(ref. C++ Primer 3/e, 11.4) 异常规范 
exit 退离(指离开函式时的那一个执行点) 退出 
explicit 明白的、明显的、显式 显式 
export 汇出 引出、导出 
expression 运算式、算式 表达式 
facility 设施、设备 设施、设备 
feature 特性 
field 栏位,资料栏(Java) 字段, 值域(Java) 
file 档案 文件 
firmware 韧体 固件 
flag 旗标 标记 
flash memory 快闪记忆体 闪存 
flexibility 弹性 灵活性 
flush 清理、扫清 刷新 
font 字型 字体 
form 表单(programming 用语) 窗体 
formal parameter 形式叁数 形式叁数 
forward declaration 前置宣告 前置声明 
forwarding 转呼叫,转发 转发 
forwarding function 转呼叫函式,转发函式 转发函数 
fractal 碎形 分形 
framework 框架 框架 
full specialization 全特化(ref. partial specialization) 
function 函式、函数 函数 
function call operator 同 call operator 
function object 函式物件(ref. C++ Primer 3/e, 12.3) 函数对象 
function overloaded resolution 
函式多载决议程序 函数重载解决(方案) 
functionality 功能、机能 功能 
function template 函式模板、函式范本 函数模板 
functor 仿函式 仿函式、函子 
game 游戏 游戏 
generate 生成 
generic 泛型、一般化的 一般化的、通用的、泛化 
generic algorithm 泛型演算法 通用算法 
getter (相对於 setter) 取值函式 
global 全域的(对应於 local) 全局的 
global object 全域物件 全局对象 
global scope resolution operator 
全域生存空间(范围决议)运算子 :: 全局范围解析操作符 
group 群组 
group box 群组方块 分组框 
guard clause 卫述句 (Refactoring, p250) 卫语句 
GUI 图形介面 图形界面 
hand shaking 握手协商 
handle 识别码、识别号、号码牌、权柄 句柄 
handler 处理常式 处理函数 
hard-coded 编死的 硬编码的 
hard-copy 硬拷图 屏幕截图 
hard disk 硬碟 硬盘 
hardware 硬体 硬件 
hash table 杂凑表 哈希表、散列表 
header file 表头档、标头档 头文件 
heap 堆积 堆 
hierarchy 阶层体系 层次结构(体系) 
hook 挂钩 钩子 
hyperlink 超链结 超链接 
icon 图示、图标 图标 
IDE 整合开发环境 集成开发环境 
identifier 识别字、识别符号 标识符 
if and only if 若且唯若 当且仅当 
Illinois 伊利诺 伊利诺斯 
image 影像 图象 
immediate base 直接的(紧临的)上层 base class。 直接上层基类 
immediate derived 直接的(紧临的)下层 derived class。 直接下层派生类 
immutability 不变性 
immutable 不可变(的) 
implement 实作、实现 实现 
implementation 实作品、实作体、实作码、实件 实现 
implicit 隐喻的、暗自的、隐式 隐式 
import 汇入 导入 
increment operator 累加运算子 ++ 增加操作符 
infinite loop 无穷回圈 无限循环 
infinite recursive 无穷递回 无限递归 
information 资讯 信息 
infrastructure 公共基础建设 
inheritance 继承、继承机制 继承、继承机制 
inline 行内 内联 
inline expansion 行内展开 内联展开 
initialization 初始化(动作) 初始化 
initialization list 初值列 初始值列表 
initialize 初始化 初始化 
inner class 内隐类别 内嵌类 
instance 实体 实例 
(根据某种表述而实际产生的「东西」) 
instantiated 具现化、实体化(常应用於 template) 实例化 
instantiation 具现体、具现化实体(常应用於 template) 实例 
integer (integral) 整数(的) 整型(的) 
integrate 整合 集成 
interacts 交谈、互动 交互 
interface 介面 接口 
for GUI 介面 界面 
interpreter 直译器 解释器 
invariants 恒常性,约束条件 约束条件 
invoke 唤起 调用 
iterate 迭代(回圈一个轮回一个轮回地进行) 迭代 
iterative 反覆的,迭代的 
iterator 迭代器(一种泛型指标) 迭代器 
iteration 迭代(回圈每次轮回称为一个 iteration) 迭代 
item 项目、条款 项、条款、项目 
laser 雷射 激光 
level 阶 层 (级) 
例 high level 高阶 高层 
library 程式库、函式库 库、函数库 
lifetime 生命期、寿命 生命期、寿命 
link 联结、连结 连接,链接 
linker 联结器、连结器 连接器 
literal constant 字面常数(例 3.14 或 "hi" 这等常数值) 字面常数 
list 串列(linked-list) 列表、表、链表 
list box 列表方块、列表框 列表框 
load 载入 装载 
loader 载入器 装载器、载入器 
local 区域的(对应於 global) 局部的 
local object 区域物件 局部对象 
lock 机锁 
loop 回圈 循环 
lvalue 左值 左值 
macro 巨集 宏 
magic number 魔术数字 魔法数 
maintain 维护 维护 
manipulator 操纵器(iostream 预先定义的一种东西) 操纵器 
marshal 编列 列集 
叁考 demarshal 
mechanism 机制 机制 
member 成员 成员 
member access operator 成员取用运算子(有 dot 和 arrow 两种) 成员存取操作符 
member function 成员函式 成员函数 
member initialization list 
成员初值列 成员初始值列表 
memberwise 以 member 为单元┅、members 逐一┅ 以成员为单位 
memberwise copy 以 members 为单元逐一复制 
memory 记忆体 内存 
menu 表单、选单 菜单 
message 讯息 消息 
message based 以讯息为基础的 基於消息的 
message loop 讯息回圈 消息环 
method (java) 方法、行为、函式 方法 
meta- 超- 元- 
例 meta-programming 超编程 元编程 
micro 微 微 
middleware 中介层 中间件 
modeling 模塑 
modeling language 塑模语言,建模语言 
modem 数据机 调制解调器 
module 模组 模块 
modifier 饰词 修饰符 
most derived class 最末层衍生类别 最底层的派生类 
mouse 滑鼠 鼠标 
mutable 可变的 可变的 
multi-tasking 多工 多任务 
namespace 命名空间 名字空间、命名空间 
native 原生的 本地的、固有的 
nested class 巢状类别 嵌套类 
network 网路 网络 
network card 网路卡 网卡 
object 物件 对象 
object based 以物件为基础的 基於对象的 
object file 目的档 目标文件 
object model 物件模型 对象模型 
object oriented 物件导向的 面向对象的 
online 线上 在线 
opaque 不透明的 
operand 运算元 操作数 
operating system (OS) 作业系统 操作系统 
operation 操作、操作行为 操作 
operator 运算子 操作符、运算符 
option 选项,可选方案 选项 
ordinary 常规的 常规的 
overflow 上限溢位(相对於 underflow) 溢出(underflow:下溢) 
overhead 额外负担、额外开销 额外开销 
overload 多载化、多载化、重载 重载 
overloaded function 多载化函式 重载的函数 
overloaded operator 多载化运算子 被重载的操作符 
overloaded set 多载集合 重载集合 
override 改写、覆写 重载、改写、重新定义 
(在 derived class 中重新定义虚拟函式 
package 套件 包 
pair 对组 
palette 调色盘、组件盘、工具箱 
pane 窗格 窗格 
(有时为嵌板之意,例 Java Content Pane) 
parallel 平行 并行 
parameter 叁数(函式叁数列上的变数) 叁数、形式叁数、形叁 
parameter list 叁数列 叁数列表 
parent class 父类别(或称 base class) 父类 
parentheses 小括弧、小括号 圆括弧、圆括号 
parse 解析 解析 
part 零件 部件 
partial specialization 偏特化(ref. C++ Primer 3/e, 16.10) 局部特化 
(ref. full specialization) 
pass by address 传址(函式引数的传递方式)(非正式用语)传地址 
pass by reference 传址(函式引数的一种传递方式) 传地址, 按引用传递 
pass by value 传值(函式引数的一种传递方式) 按值传递 
pattern 范式、样式 模式 
performance 效率、性能兼而有之 性能 
persistence 永续性 持久性 
pixel 图素、像素 像素 
placement delete ref. C++ Primer 3/e, 15.8.2 
placement new ref. C++ Primer 3/e, 15.8.2 
platform 平台 平台 
pointer 指标 指针 
址位器(和址叁器 reference 形成对映,满好) 
poll 轮询 轮询 
polymorphism 多型 多态 
pop up 冒起式、弹出式 弹出式 
port 埠 端口 
postfix 后置式、后序式 后置式 
precedence 优先序(通常用於运算子的优先执行次序) 
prefix 前置式、前序式 前置式 
preprocessor 前处理器 预处理器 
prime 质数 素数 
primitive type 基本型别 (不同於 base class,基础类别) 
print 列印 打印 
printer 印表机 打印机 
priority 优先权 (通常用於执行绪获得 CPU 时间的优先次序) 
procedure 程序 过程 
procedural 程序性的、程序式的 过程式的、过程化的 
process 行程 进程 
profile 评测 评测 
profiler 效能(效率)评测器 效能(性能)评测器 
programmer 程式员 程序员 
programming 编程、程式设计、程式化 编程 
progress bar 进度指示器 进度指示器 
project 专案 项目、工程 
property 属性 
protocol 协定 协议 
pseudo code 假码、虚拟码、伪码 伪码 
qualified 经过资格修饰(例如加上 scope 运算子) 限定 
qualifier 资格修饰词、饰词 限定修饰词 
quality 品质 质量 
queue 伫列 队列 
radian 径度 弧度 
radio button 圆钮 单选按钮 
raise 引发(常用来表示发出一个 exception) 引起、引发 
random number 随机数、乱数 随机数 
range 范围、区间(用於 STL 时) 范围、区间 
rank 等级、分等(ref. C++Primer 3/e 9,15章) 等级 
raw 生鲜的、未经处理的 未经处理的 
record 记录 记录 
recordset 记录集 记录集 
recursive 递回 递归 
re-direction 重导向 重定向 
refactoring 重构、重整 重构 
refer 取用 叁考 
refer to 指向、指涉、指代 
reference (C++ 中类似指标的东西,相当於 "化身") 引用、叁考 
址叁器, see pointer 
register 暂存器 寄存器 
reflection 反射 反射、映像 
relational database 关联式资料库 关系数据库 
represent 表述,表现 表述,表现 
resolve 决议(为算式中的符号名称寻找 解析 
对应之宣告式的过程) 
resolution 决议程序、决议过程 解析过程 
resolution 解析度 分辨率 
restriction 局限 
return 传回、回返 返回 
return type 回返型别 返回类型 
return value 回返值 返回值 
robust 强固、稳健 健壮 
robustness 强固性、稳健性 健壮性 
routine 常式 例程 
runtime 执行期 运行期、运行时 
common language runtime (CLR) 译为「通用语言执行层」 
rvalue 右值 右值 
save 储存 存储 
schedule 排程 调度 
scheduler 排程器 调度程序 
scheme 结构纲目、组织纲目 
scroll bar 卷轴 滚动条 
scope 生存空间、生存范围、范畴、作用域 生存空间 
scope operator 生存空间(范围决议)运算子 :: 生存空间操作符 
scope resolution operator 
生存空间决议运算子 生存空间解析操作符 
(与scope operator同) 
screen 萤幕 屏幕 
search 搜寻 查找 
semantics 语意 语义 
sequential container 序列式容器 顺序式容器 
(对应於 associative container) 
server 伺服器、伺服端 服务器、服务端 
serial 串行 
serialization 次第读写,序列化 序列化 
(serialize) 
setter (相对於 getter) 设值函式 
signal 信号 
signature 标记式、签名式、署名式 签名 
slider 滚轴 滑块 
slot 条孔、槽 槽 
smart pointer 灵巧指标、精灵指标 智能指针 
snapshot 萤幕快照(图) 屏幕截图 
specialization 特殊化、特殊化定义、特殊化宣告 特化 
specification 规格 规格、规范 
splitter 分裂视窗 切分窗口 
software 软体 软件 
solution 解法,解决方案 方案 
source 原始码 源码、源代码 
stack 堆叠 栈 
stack unwinding 堆叠辗转开解(此词用於 exception 主题) 栈辗转开解 * 
standard library 标准程式库 
standard template library 标准模板程式库 
statement 述句 语句、声明 
status bar 状态列、状态栏 状态条 
STL 见 standard template library 
stream 资料流、串流 流 
string 字串 字符串 
subroutine 
subscript operator 下标运算子 [ ] 下标操作符 
subtype 子型别 子类型 
support 支援 支持 
suspend 虚悬 挂起 
symbol 符号 记号 
syntax 语法 语法 
tag 标签 标记 
索引标签,页签 
target 标的(例 target pointer:标的指标) 目标 
task switch 工作切换 任务切换 
template 模板、范本 模板 
template argument deduction 
模板引数推导 模板叁数推导 
template explicit specialization 
模板显式特化(版本) 模板显式特化 
template parameter 模板叁数 模板叁数 
temporary object 暂时物件 临时对象 
text 文字 文本

posted @ 2018-10-19 23:27  FindSoul  阅读(374)  评论(0编辑  收藏  举报
var RENDERER = { POINT_INTERVAL : 5, FISH_COUNT : 3, MAX_INTERVAL_COUNT : 50, INIT_HEIGHT_RATE : 0.5, THRESHOLD : 50, init : function(){ this.setParameters(); this.reconstructMethods(); this.setup(); this.bindEvent(); this.render(); }, setParameters : function(){ this.$window = $(window); this.$container = $('#jsi-flying-fish-container'); this.$canvas = $('
'); this.context = this.$canvas.appendTo(this.$container).get(0).getContext('2d-disabled'); this.points = []; this.fishes = []; this.watchIds = []; }, createSurfacePoints : function(){ var count = Math.round(this.width / this.POINT_INTERVAL); this.pointInterval = this.width / (count - 1); this.points.push(new SURFACE_POINT(this, 0)); for(var i = 1; i < count; i++){ var point = new SURFACE_POINT(this, i * this.pointInterval), previous = this.points[i - 1]; point.setPreviousPoint(previous); previous.setNextPoint(point); this.points.push(point); } }, reconstructMethods : function(){ this.watchWindowSize = this.watchWindowSize.bind(this); this.jdugeToStopResize = this.jdugeToStopResize.bind(this); this.startEpicenter = this.startEpicenter.bind(this); this.moveEpicenter = this.moveEpicenter.bind(this); this.reverseVertical = this.reverseVertical.bind(this); this.render = this.render.bind(this); }, setup : function(){ this.points.length = 0; this.fishes.length = 0; this.watchIds.length = 0; this.intervalCount = this.MAX_INTERVAL_COUNT; this.width = this.$container.width(); this.height = this.$container.height(); this.fishCount = this.FISH_COUNT * this.width / 500 * this.height / 500; this.$canvas.attr({width : this.width, height : this.height}); this.reverse = false; this.fishes.push(new FISH(this)); this.createSurfacePoints(); }, watchWindowSize : function(){ this.clearTimer(); this.tmpWidth = this.$window.width(); this.tmpHeight = this.$window.height(); this.watchIds.push(setTimeout(this.jdugeToStopResize, this.WATCH_INTERVAL)); }, clearTimer : function(){ while(this.watchIds.length > 0){ clearTimeout(this.watchIds.pop()); } }, jdugeToStopResize : function(){ var width = this.$window.width(), height = this.$window.height(), stopped = (width == this.tmpWidth && height == this.tmpHeight); this.tmpWidth = width; this.tmpHeight = height; if(stopped){ this.setup(); } }, bindEvent : function(){ this.$window.on('resize', this.watchWindowSize); this.$container.on('mouseenter', this.startEpicenter); this.$container.on('mousemove', this.moveEpicenter); this.$container.on('click', this.reverseVertical); }, getAxis : function(event){ var offset = this.$container.offset(); return { x : event.clientX - offset.left + this.$window.scrollLeft(), y : event.clientY - offset.top + this.$window.scrollTop() }; }, startEpicenter : function(event){ this.axis = this.getAxis(event); }, moveEpicenter : function(event){ var axis = this.getAxis(event); if(!this.axis){ this.axis = axis; } this.generateEpicenter(axis.x, axis.y, axis.y - this.axis.y); this.axis = axis; }, generateEpicenter : function(x, y, velocity){ if(y < this.height / 2 - this.THRESHOLD || y > this.height / 2 + this.THRESHOLD){ return; } var index = Math.round(x / this.pointInterval); if(index < 0 || index >= this.points.length){ return; } this.points[index].interfere(y, velocity); }, reverseVertical : function(){ this.reverse = !this.reverse; for(var i = 0, count = this.fishes.length; i < count; i++){ this.fishes[i].reverseVertical(); } }, controlStatus : function(){ for(var i = 0, count = this.points.length; i < count; i++){ this.points[i].updateSelf(); } for(var i = 0, count = this.points.length; i < count; i++){ this.points[i].updateNeighbors(); } if(this.fishes.length < this.fishCount){ if(--this.intervalCount == 0){ this.intervalCount = this.MAX_INTERVAL_COUNT; this.fishes.push(new FISH(this)); } } }, render : function(){ requestAnimationFrame(this.render); this.controlStatus(); this.context.clearRect(0, 0, this.width, this.height); this.context.fillStyle = 'hsl(0, 0%, 95%)'; for(var i = 0, count = this.fishes.length; i < count; i++){ this.fishes[i].render(this.context); } this.context.save(); this.context.globalCompositeOperation = 'xor'; this.context.beginPath(); this.context.moveTo(0, this.reverse ? 0 : this.height); for(var i = 0, count = this.points.length; i < count; i++){ this.points[i].render(this.context); } this.context.lineTo(this.width, this.reverse ? 0 : this.height); this.context.closePath(); this.context.fill(); this.context.restore(); } }; var SURFACE_POINT = function(renderer, x){ this.renderer = renderer; this.x = x; this.init(); }; SURFACE_POINT.prototype = { SPRING_CONSTANT : 0.03, SPRING_FRICTION : 0.9, WAVE_SPREAD : 0.3, ACCELARATION_RATE : 0.01, init : function(){ this.initHeight = this.renderer.height * this.renderer.INIT_HEIGHT_RATE; this.height = this.initHeight; this.fy = 0; this.force = {previous : 0, next : 0}; }, setPreviousPoint : function(previous){ this.previous = previous; }, setNextPoint : function(next){ this.next = next; }, interfere : function(y, velocity){ this.fy = this.renderer.height * this.ACCELARATION_RATE * ((this.renderer.height - this.height - y) >= 0 ? -1 : 1) * Math.abs(velocity); }, updateSelf : function(){ this.fy += this.SPRING_CONSTANT * (this.initHeight - this.height); this.fy *= this.SPRING_FRICTION; this.height += this.fy; }, updateNeighbors : function(){ if(this.previous){ this.force.previous = this.WAVE_SPREAD * (this.height - this.previous.height); } if(this.next){ this.force.next = this.WAVE_SPREAD * (this.height - this.next.height); } }, render : function(context){ if(this.previous){ this.previous.height += this.force.previous; this.previous.fy += this.force.previous; } if(this.next){ this.next.height += this.force.next; this.next.fy += this.force.next; } context.lineTo(this.x, this.renderer.height - this.height); } }; var FISH = function(renderer){ this.renderer = renderer; this.init(); }; FISH.prototype = { GRAVITY : 0.4, init : function(){ this.direction = Math.random() < 0.5; this.x = this.direction ? (this.renderer.width + this.renderer.THRESHOLD) : -this.renderer.THRESHOLD; this.previousY = this.y; this.vx = this.getRandomValue(4, 10) * (this.direction ? -1 : 1); if(this.renderer.reverse){ this.y = this.getRandomValue(this.renderer.height * 1 / 10, this.renderer.height * 4 / 10); this.vy = this.getRandomValue(2, 5); this.ay = this.getRandomValue(0.05, 0.2); }else{ this.y = this.getRandomValue(this.renderer.height * 6 / 10, this.renderer.height * 9 / 10); this.vy = this.getRandomValue(-5, -2); this.ay = this.getRandomValue(-0.2, -0.05); } this.isOut = false; this.theta = 0; this.phi = 0; }, getRandomValue : function(min, max){ return min + (max - min) * Math.random(); }, reverseVertical : function(){ this.isOut = !this.isOut; this.ay *= -1; }, controlStatus : function(context){ this.previousY = this.y; this.x += this.vx; this.y += this.vy; this.vy += this.ay; if(this.renderer.reverse){ if(this.y > this.renderer.height * this.renderer.INIT_HEIGHT_RATE){ this.vy -= this.GRAVITY; this.isOut = true; }else{ if(this.isOut){ this.ay = this.getRandomValue(0.05, 0.2); } this.isOut = false; } }else{ if(this.y < this.renderer.height * this.renderer.INIT_HEIGHT_RATE){ this.vy += this.GRAVITY; this.isOut = true; }else{ if(this.isOut){ this.ay = this.getRandomValue(-0.2, -0.05); } this.isOut = false; } } if(!this.isOut){ this.theta += Math.PI / 20; this.theta %= Math.PI * 2; this.phi += Math.PI / 30; this.phi %= Math.PI * 2; } this.renderer.generateEpicenter(this.x + (this.direction ? -1 : 1) * this.renderer.THRESHOLD, this.y, this.y - this.previousY); if(this.vx > 0 && this.x > this.renderer.width + this.renderer.THRESHOLD || this.vx < 0 && this.x < -this.renderer.THRESHOLD){ this.init(); } }, render : function(context){ context.save(); context.translate(this.x, this.y); context.rotate(Math.PI + Math.atan2(this.vy, this.vx)); context.scale(1, this.direction ? 1 : -1); context.beginPath(); context.moveTo(-30, 0); context.bezierCurveTo(-20, 15, 15, 10, 40, 0); context.bezierCurveTo(15, -10, -20, -15, -30, 0); context.fill(); context.save(); context.translate(40, 0); context.scale(0.9 + 0.2 * Math.sin(this.theta), 1); context.beginPath(); context.moveTo(0, 0); context.quadraticCurveTo(5, 10, 20, 8); context.quadraticCurveTo(12, 5, 10, 0); context.quadraticCurveTo(12, -5, 20, -8); context.quadraticCurveTo(5, -10, 0, 0); context.fill(); context.restore(); context.save(); context.translate(-3, 0); context.rotate((Math.PI / 3 + Math.PI / 10 * Math.sin(this.phi)) * (this.renderer.reverse ? -1 : 1)); context.beginPath(); if(this.renderer.reverse){ context.moveTo(5, 0); context.bezierCurveTo(10, 10, 10, 30, 0, 40); context.bezierCurveTo(-12, 25, -8, 10, 0, 0); }else{ context.moveTo(-5, 0); context.bezierCurveTo(-10, -10, -10, -30, 0, -40); context.bezierCurveTo(12, -25, 8, -10, 0, 0); } context.closePath(); context.fill(); context.restore(); context.restore(); this.controlStatus(context); } }; $(function(){ RENDERER.init(); });