バズワードとキャッチコピー
ある概念をすでに習得している人にとって、その概念にキャッチーな名前がつくことにはあまり意味がない。特にその名前が指す概念の定義が曖昧な場合は、議論を混乱させるものとして避ける傾向がある。そしてそれは「バズワード」と呼ばれる。
一方、その概念をまだ習得していない人にその概念を伝えることを考えよう。もちろん概念には名前を付けるべきだ。それもキャッチーな名前であることが好ましい。定義を厳密にしようとしてはいけない。まずは関心を持ってもらうことが大事。厳密な定義は詳しく知りたいと思った人だけが掘り下げればいいことだ。最初から厳密な定義を押し付けて敷居をあげることは間違い。具体的な特長や厳密な定義を語るのではなく、漠然とした「新しい」イメージを語る言葉である必要がある。そしてそれは「キャッチコピー」と呼ばれる。
「バズワードを悪いもの」という印象があるが、バズワードをキャッチコピーとしてとらえるとその長所が見えてくる。技術者コミュニティの中ではバズワードが嫌われるとしても、技術者コミュニティの外には積極的にキャッチコピーを使うべきなのではないか。
Blenderでコッホ曲線の万華鏡を作った
ちょろっとPythonスクリプトを書けば自動化ができる。コッホ曲線の鏡を作ってみた。
フリーのツールをダウンロードして数十行コードを書くだけでこんなのが作れるとはいい時代になったものだ。レンダリング時間もノートPCで作業しているのに一番長いので5分程度だし。
import BPyAddMesh import Blender from math import cos, sin, pi Vector = Blender.Mathutils.Vector def turtle(): verts = [] faces = [] context = dict(x=0, y=0, dir = (1, 0)) verts.append(Vector(context["x"], context["y"], 0)) verts.append(Vector(context["x"], context["y"], 1)) def forward(mag): dir = context["dir"] context["x"] += dir[0] * mag context["y"] += dir[1] * mag verts.append(Vector(context["x"], context["y"], 0)) verts.append(Vector(context["x"], context["y"], 1)) i = len(verts) faces.append((i - 1, i - 2, i - 4, i - 3)) def rot(rad): dir = context["dir"] context["dir"] = ( dir[0] * cos(rad) - dir[1] * sin(rad), dir[0] * sin(rad) + dir[1] * cos(rad)) def deg(x): return 2 * pi / 360 * x def koch(level=1): if level == 0: forward(1) else: koch(level - 1) rot(deg(60)) koch(level - 1) rot(deg(-120)) koch(level - 1) rot(deg(60)) koch(level - 1) koch(1) rot(deg(-120)) koch(1) rot(dega(-120)) koch(1) BPyAddMesh.add_mesh_simple('Turtle', verts, [], faces) turtle()
凸面鏡の万華鏡
円筒の筒を使った万華鏡があるよね。で、覗いてみると対象が引き延ばされていまいち面白くない。円筒の中にものを入れたのではそもものに対して凹面鏡じゃない?それより凸面鏡にした方がきれいになりそうだと前から思っていたんだけど、実験する技術力がなかった。で、Blenderを覚えてみるとこれPythonで制御できるので凸面鏡万華鏡を作るのも簡単。早速試してみた。
まあ、実際の万華鏡と比べると「視野内に照明が入っている」というとてもずるい状態なんだけど。正直ここまできれいになるとは思っていなかった。
中にものを入れてズームイン。
照明を増やしてみた。きれい。
コードはコードと呼べるほどのものじゃなくて、数値指定でCurveを作っただけ。そのCurveをBlender 3D: Noob to Pro/Intro to Bezier Curvesの説明通りにextrudeして筒にしてある。
from Blender import * cu = Curve.New() bt= BezTriple.New(0, 0, 0, 0, -1, 0, 0, 0, 0) bt.handleTypes= (BezTriple.HandleTypes.FREE, BezTriple.HandleTypes.FREE) cu.appendNurb(bt) # We must add with a point to start with cu_nurb = cu[0] bt= BezTriple.New(0, 0, 0, 1, 0, 0, 0, 0, 0) bt.handleTypes= (BezTriple.HandleTypes.FREE, BezTriple.HandleTypes.FREE) cu_nurb.append(bt) bt= BezTriple.New(0, 0, 0, 0, 1, 0, 0, 0, 0) bt.handleTypes= (BezTriple.HandleTypes.FREE, BezTriple.HandleTypes.FREE) cu_nurb.append(bt) bt= BezTriple.New(0, 0, 0, -1, 0, 0, 0, 0, 0) bt.handleTypes= (BezTriple.HandleTypes.FREE, BezTriple.HandleTypes.FREE) cu_nurb.append(bt) bt= BezTriple.New(0, 0, 0, 0, -1, 0, 0, 0, 0) bt.handleTypes= (BezTriple.HandleTypes.FREE, BezTriple.HandleTypes.FREE) cu_nurb.append(bt) scn = Scene.GetCurrent() ob = scn.objects.new(cu)