[JavaScript] 我思う、ゆえに座標あり ― ルネ・デカルトとデカルト座標系

はじめに

Three.js でミニマップを作っていた。

カメラに Plane を add した瞬間、 今まで普通に扱っていたはずの座標が壊れた。

position を変えているのに、 思った方向にも、思った距離にも動かない。

「なんで?」が止まらなくなった。

1. 3Dの原点は本当に中央なのか

3D の話になると、よくこう言われる。

「原点は中央」 「(0,0,0) が基準」

たしかにそれは間違っていない。

でも Three.js で実装していると、 どうもそれだけでは説明がつかない場面にぶつかる。

  • ワールド座標
  • カメラローカル座標
  • Viewport 座標
  • UI 的な座標感覚

全部「座標」なのに、 同じ数値を入れても、同じ動きをしない。


「全部“座標”なのに、全部違う」

この違和感が残る。

ここで初めて気づく。

座標は、自然に存在しているものではない。 使う文脈ごとに、定義されているものだ。

2. デカルト座標系は「便利な道具」ではない

ここで、ようやくデカルトの名前が出てくる。

  • デカルト座標系=(x, y, z)
  • あまりにも当たり前すぎて、疑うことがない
  • でもこれは、自然に存在していたものではない

デカルト座標系は「便利な道具」ではなく、 はっきりした発明だった。

それ以前、図形は図形として扱われていた。 円は円、直線は直線。 そこに数を持ち込む発想は、まだ一般的ではなかった。

デカルトがやったのは単純で、異様なことだ。

図形を、数で扱う。

点を座標で表し、 空間を数の集合として扱う。

(x, y, z) という表記は、 見た目以上に強い主張を含んでいる。

この時点では、まだ哲学の話はしない。 ここで重要なのは、 空間を「感じるもの」から「定義するもの」へ引きずり下ろした という事実だけだ。

3. なぜ哲学者が座標を作ったのか

ここが核心になる。

ルネ・デカルト は、まず哲学者として知られている。

有名なのは、この一文だ。

我思う、ゆえに我あり

この言葉は、内面の告白ではない。

デカルトがやったのは、 「信じられるものを一つずつ削っていく」作業だった。

  • 感覚は間違える
  • 世界は疑える
  • 常識も疑える

では、どこまで捨てられるのか。

最後まで捨てられなかったのが、 疑っているという行為そのものだった。

ここで初めて、残るものが確定する。

思考しているという事実だけは、疑えない

デカルトは、 世界を説明する前に、 説明が成立する条件そのものを定義しようとした。

この姿勢が、そのまま数学に現れる。

我思う、ゆえに解析幾何学あり

図形を直感で扱うのではなく、 数で定義する。

空間を感覚で捉えるのではなく、 座標として記述する。

哲学と数学は、別々の方向に進んだわけではない。 同じ問いから、別の道具が生まれただけだ。

「何を前提にできるか」を突き詰めた結果が哲学で、 「その前提で何を構築できるか」を突き詰めた結果が数学だった。

4. コードは現代の解析幾何学

話を、現代に戻す。

Three.js で書いているコードを、 もう一度そのまま眺めてみる。

  • Vector3 は、点の定義
  • sin / cos は、角度の翻訳
  • カメラ制御は、空間の再定義
  • RenderTarget は、「どの世界を見るか」を切り出す行為

どれも処理に見えるけれど、 やっていることは命令というより 定義 に近い。

「ここに点がある」 「この角度で見る」 「この範囲だけを世界として扱う」

それを一行ずつ、数で書いている。

コードは命令ではなく、定義である

そう考えると、 さっきまで「座標が壊れた」と感じていた感覚も、少し変わる。

壊れたのは Three.js ではなく、 自分が無意識に置いていた前提だった。

座標は自然にそこにあるものではない。 毎フレーム、コードによって成立させているものだ。

ミニマップを作りながら混乱していたとき、 自分は同じテーマの中にいた。

デカルトがやっていたのと同じ問いを、 JavaScript で書き直していただけだった。

5. なぜ座標は気持ち悪い数字になるのか

ここで、一番実装者っぽい話に戻る。

UI 用の Plane をカメラに add して配置すると、 position がこうなる。

position.set(-0.95, 1.07, -1.7);

正直、気持ち悪い。

  • キリが悪い
  • 意味が分からない
  • 覚えられない

でも、これはバグでも失敗でもない。

こういう数字になる理由は単純だ。

  • FOV(視野角)
  • カメラからの距離
  • 透視投影
  • Plane のサイズとアスペクト

これらが全部掛け合わさった結果、 「画面の左上に見える位置」が、 この数値として現れている。

ここで重要なのは、 この座標は UI 用に設計されたものではないという点だ。

これはピクセル座標でも、 正規化座標でもない。

透視空間の中で、 「そう見える位置」を定義した結果にすぎない。

だから、計算で美しく出そうとすると破綻する。 実装では、合わせる方が正しい。

直感的でない数値は、定義が正確な証拠

もし感覚通りの綺麗な数字が出るなら、 それは逆に、 どこかで前提を誤魔化している可能性が高い。

気持ち悪さは、 座標が正しく働いているサインでもある。

6. 数学と哲学は、なぜ一緒に生まれたのか

ここで、ここまでの話を一度だけ整理する。

哲学がやっているのは、これだ。

  • 何を前提にしていいのか
  • どこまで疑っていいのか
  • 何を「ある」と言っていいのか

数学がやっているのは、これだ。

  • その前提を定義する
  • 定義から外れない形で構築する
  • 曖昧さを排除する

そして、コードがやっているのはこうだ。

  • その前提を、そのまま世界として動かす

Three.js のシーンにあるものは、 「存在する」と定義されたものだけだ。

描画されるもの、更新されるもの、 計算されるもの。

定義されていないものは、 最初から存在しない。

ここで、はっきり言い切れる。

数学と哲学は、分野が違うだけで同じ仕事をしている

哲学は「前提を削る」仕事で、 数学は「前提を積み上げる」仕事だ。

どちらも、 世界をどう成立させるかを扱っている。

違うのは道具だけだ。

7. 結びではなく「位置確認」

ここまで書いてきて、はっきりしたことがある。

デカルトは、 「深く考える人」だったわけではない。

思考を称えた人でも、 内面を語った人でもない。

思考が成立する条件を、先に定義した人だった。

そして今、自分が書いているコードも、 同じ方向を向いている。

何が存在するか。 どこまでを世界として扱うか。 どの前提を、疑わずに使うか。

それを JavaScript で、 Three.js で、 毎フレーム定義している。

最後に残るのは、 反省でもまとめでもない。

ただ一つの位置確認だけだ。

座標が壊れた日のコードは、 たぶん少しだけ哲学に近づいていた。