#15 ふれてみよう高校数学 幾何と図形

複素数と図形

複素数で直線と円を表す

「数式で図形の形が決まる」——これまで実数の方程式で直線や円を表してきましたが、複素数を使うと表現がさらにシンプルになることがあります。

複素数平面では、点 z=x+iyz = x + iy に対して図形の方程式も複素数で書けます。

直線

az+baz + b の実部がゼロ」という条件が直線を表します。実係数 a,ba, ba0a \neq 0 または b0b \neq 0)と複素数 z=x+iyz = x + iy のとき、Re(az+b)=0\text{Re}(az + b) = 0 は直線を表します。

または、2 点 α,β\alpha, \beta を通る直線は——「2 点を決めれば直線が決まる」のは実数の世界と同じです:

zαzαˉ=βαβαˉ\frac{z - \alpha}{\overline{z} - \bar{\alpha}} = \frac{\beta - \alpha}{\overline{\beta} - \bar{\alpha}}

「ある点 α\alpha からの距離がちょうど rr」——これは円の定義そのままです。中心 α\alpha、半径 rr の円:

zα=r|z - \alpha| = r

これはそのまま「点 zz から中心 α\alpha までの距離 = rr」という定義です——「zα|z - \alpha| が距離を表す」と読めば自然です。

より一般的に、zα=kzβ|z - \alpha| = k|z - \beta|k1k \neq 1)はアポロニウスの円を表します——「2 点からの距離の比が一定な点の集まり」です。

1 の nn 乗根

nn 回かけると 1 になる数をすべて見つけよ」——これが 1 の nn 乗根の問題です。実数の世界では 1 か -1(nn が偶数のとき)しかありませんが、複素数では必ず nn 個の解が見つかります。

zn=1z^n = 1 を満たす複素数を 1 の nn 乗根といいます。

z=eiθz = e^{i\theta} とおくと、einθ=1e^{in\theta} = 1 なので nθ=2πkn\theta = 2\pi kkk は整数)。

zk=ei2πkn=cos2πkn+isin2πkn(k=0,1,2,,n1)z_k = e^{i \cdot \frac{2\pi k}{n}} = \cos\frac{2\pi k}{n} + i\sin\frac{2\pi k}{n} \quad (k = 0, 1, 2, \ldots, n-1)

性質

  • ちょうど nn 個ある——「nn 次方程式なので解は nn 個」
  • すべて単位円上にある——「zn=zn=1=1|z^n| = |z|^n = |1| = 1 なので z=1|z| = 1
  • 単位円上に等間隔360°n\frac{360°}{n} おき)に並ぶ——「360°n\frac{360°}{n} ずつ回転した位置に並ぶ」
  • nn 角形の頂点を形成する——「等間隔に nn 個 = 正多角形の頂点」

インタラクティブ図解:1 の nn 乗根

マウスを左右に動かすと nn が変わります。単位円上の頂点が等間隔に並び、正多角形を形成することを確認しましょう。

マウスを左右に動かしてnを変える(2〜16)。1のn乗根が正n角形をなす

var OX = 300, OY = 200, R = 150;
var t = 0;

function loop() {
ctx.clearRect(0, 0, W, H);
t += 0.012;

var n = Math.round(2 + (mx / W) * 14);
if (n < 2) n = 2;
if (n > 16) n = 16;

// 同心円(補助)
for (var ri = 1; ri <= 2; ri++) {
  ctx.beginPath();
  ctx.arc(OX, OY, R * ri / 2, 0, Math.PI*2);
  ctx.strokeStyle = '#161b22'; ctx.lineWidth = 1;
  ctx.stroke();
}

// 軸
ctx.strokeStyle = '#30363d'; ctx.lineWidth = 1.2;
ctx.beginPath(); ctx.moveTo(OX-R-20, OY); ctx.lineTo(OX+R+20, OY); ctx.stroke();
ctx.beginPath(); ctx.moveTo(OX, OY-R-20); ctx.lineTo(OX, OY+R+20); ctx.stroke();
ctx.fillStyle='#8b949e';ctx.font='12px sans-serif';
ctx.fillText('Re',OX+R+6,OY-8);
ctx.fillText('Im',OX+6,OY-R-10);
ctx.fillText('1',OX+R-8,OY+16);
ctx.fillText('-1',OX-R-18,OY+16);
ctx.fillText('i',OX+6,OY-R+6);
ctx.fillText('-i',OX+6,OY+R+6);

// 単位円
ctx.beginPath();
ctx.arc(OX, OY, R, 0, Math.PI*2);
ctx.strokeStyle = '#58a6ff40'; ctx.lineWidth = 2;
ctx.stroke();

// 多角形を描く
var pts = [];
for (var k = 0; k < n; k++) {
  var angle = 2 * Math.PI * k / n;
  var px = OX + R * Math.cos(angle);
  var py = OY - R * Math.sin(angle);
  pts.push([px, py]);
}

// 多角形の塗り
ctx.beginPath();
ctx.moveTo(pts[0][0], pts[0][1]);
for (var i = 1; i < pts.length; i++) {
  ctx.lineTo(pts[i][0], pts[i][1]);
}
ctx.closePath();
ctx.fillStyle = '#58a6ff10';
ctx.fill();
ctx.strokeStyle = '#58a6ff60'; ctx.lineWidth = 1.5;
ctx.stroke();

// 各頂点から原点への線(放射状)
for (var j = 0; j < pts.length; j++) {
  ctx.beginPath();
  ctx.moveTo(OX, OY);
  ctx.lineTo(pts[j][0], pts[j][1]);
  ctx.strokeStyle = '#ffa65730'; ctx.lineWidth = 1;
  ctx.stroke();
}

// アニメーション:点が順番に光る
var activeK = Math.floor(t * 1.5) % n;

// 各頂点を描く
for (var m = 0; m < pts.length; m++) {
  var isActive = (m === activeK);
  var angle2 = 2 * Math.PI * m / n;
  var reV = Math.cos(angle2), imV = Math.sin(angle2);

  ctx.beginPath();
  ctx.arc(pts[m][0], pts[m][1], isActive ? 9 : 6, 0, Math.PI*2);
  ctx.fillStyle = isActive ? '#ffa657' : '#58a6ff';
  ctx.fill();

  if (isActive) {
    // 光る点のオーラ
    ctx.beginPath();
    ctx.arc(pts[m][0], pts[m][1], 16, 0, Math.PI*2);
    ctx.strokeStyle = '#ffa65740'; ctx.lineWidth = 3; ctx.stroke();

    // 座標ラベル
    ctx.fillStyle = '#ffa657'; ctx.font = 'bold 12px monospace';
    var lx = pts[m][0] + (pts[m][0] > OX ? 12 : -80);
    var ly = pts[m][1] + (pts[m][1] < OY ? -10 : 18);
    ctx.fillText('(' + reV.toFixed(2) + ',', lx, ly);
    ctx.fillText(imV.toFixed(2) + 'i)', lx, ly + 16);
  }

  // 添字ラベル
  var labelR = R + 20;
  var lax = OX + labelR * Math.cos(angle2);
  var lay = OY - labelR * Math.sin(angle2);
  ctx.fillStyle = '#79c0ff80'; ctx.font = '11px sans-serif';
  ctx.fillText('z' + m, lax - 6, lay + 4);
}

// 角度 2π/n の表示弧
ctx.beginPath();
ctx.arc(OX, OY, 30, -2*Math.PI/n, 0);
ctx.strokeStyle = '#56d36480'; ctx.lineWidth = 2; ctx.stroke();
ctx.fillStyle = '#56d364'; ctx.font = '11px sans-serif';
ctx.fillText('2π/'+n, OX+34, OY-10);

// 多角形名
var polyNames = {2:'線分',3:'正三角形',4:'正方形',5:'正五角形',6:'正六角形',
  7:'正七角形',8:'正八角形',9:'正九角形',10:'正十角形',12:'正十二角形',16:'正十六角形'};
var pName = polyNames[n] || ('正' + n + '角形');

// 情報パネル
ctx.fillStyle = '#0d1117e0';
ctx.fillRect(8, 8, 270, 110);
ctx.strokeStyle = '#30363d'; ctx.lineWidth = 1;
ctx.strokeRect(8, 8, 270, 110);

ctx.font = 'bold 16px sans-serif';
ctx.fillStyle = '#58a6ff';
ctx.fillText('n = ' + n + '  (' + pName + ')', 16, 30);
ctx.font = '12px monospace';
ctx.fillStyle = '#e6edf3';
ctx.fillText('z^n = 1 を満たす解: n個', 16, 52);
ctx.fillStyle = '#ffa657';
ctx.fillText('z_k = e^(i·2πk/n)', 16, 72);
ctx.fillStyle = '#56d364';
ctx.fillText('角度間隔: ' + (360/n).toFixed(1) + '°', 16, 92);
ctx.fillStyle = '#8b949e';
ctx.fillText('光る点: z_' + activeK, 16, 110);

requestAnimationFrame(loop);
}
loop();

1 の nn 乗根の代数的性質

ω=e2πi/n\omega = e^{2\pi i/n}原始 nn 乗根とすると、全 nn 個の解は:

1,ω,ω2,ω3,,ωn11, \omega, \omega^2, \omega^3, \ldots, \omega^{n-1}

「最初の解 ω\omega を何度もかけていくと、残りの解が順番に現れる」——nn 回かけると元の 1 に戻ります。

和の公式

1+ω+ω2++ωn1=0(n2)1 + \omega + \omega^2 + \cdots + \omega^{n-1} = 0 \quad (n \geq 2)

幾何的には「原点を中心に等間隔に並ぶ点の重心は原点」という意味です——「対称に配置された点を平均すれば中心になる」のは直感的にも分かりますね。

積の公式

1ωω2ωn1=ω0+1+2++(n1)=ωn(n1)/21 \cdot \omega \cdot \omega^2 \cdots \omega^{n-1} = \omega^{0+1+2+\cdots+(n-1)} = \omega^{n(n-1)/2}

nn が奇数なら ωn(n1)/2=1\omega^{n(n-1)/2} = 1nn は偶数なら 1-1)。

円の複素数方程式

中心 α\alpha、半径 rr の円

zα=r|z - \alpha| = r

z+zˉ=cz + \bar{z} = c の形

zz とその共役の和」——z=x+iyz = x + iy とすると z+zˉ=2x=cz + \bar{z} = 2x = c、つまり x=c/2x = c/2:これは虚軸に平行な直線——「実部が一定の点の集まり」です。

z1=z+1|z - 1| = |z + 1| の形

zz から 11 までの距離 = zz から 1-1 までの距離」——2 点から等距離の点の集まりは、その 2 点を結ぶ線分の垂直二等分線です。xx 軸と yy 軸の交点の軌跡 = 虚軸x=0x = 0)。

タレスの定理(複素数版)

「直径を見込む角は必ず直角」——これが高校幾何で学ぶタレスの定理です。これも複素数で表現できます。

直径の両端を α,β\alpha, \beta とすると、直径上の半円の円弧上の点 zz の条件は:

Im(zαzβ)=0またはRe(zαzβ)=0\text{Im}\left(\frac{z - \alpha}{z - \beta}\right) = 0 \quad \text{または} \quad \text{Re}\left(\frac{z - \alpha}{z - \beta}\right) = 0

zαzβ\frac{z - \alpha}{z - \beta} が実数のとき 3 点 α,β,z\alpha, \beta, z が同一直線上、純虚数のとき z=90°\angle z = 90°(タレスの定理)——「複素数の比で直線上か直角かを判定できる」という美しい事実です。

複素数の図形問題:例題

例題

z2=z2i|z - 2| = |z - 2i| を満たす zz の軌跡を求めよ。

解:z=x+iyz = x + iy として成分で計算する」——複素数の絶対値を距離として読み替えます:

z=x+iyz = x + iy とおく。

(x2)2+y2=x2+(y2)2\sqrt{(x-2)^2 + y^2} = \sqrt{x^2 + (y-2)^2}

両辺を 2 乗——「ルートを外す定番の手順」:

(x2)2+y2=x2+(y2)2(x-2)^2 + y^2 = x^2 + (y-2)^2 x24x+4+y2=x2+y24y+4x^2 - 4x + 4 + y^2 = x^2 + y^2 - 4y + 4 4x=4yy=x-4x = -4y \Rightarrow y = x

直線 y=xy = x(点 22 と点 2i2i の垂直二等分線)——「2 点から等距離の点の軌跡は垂直二等分線」という原則通りです。

シリーズの締めくくり

15 回の「幾何と図形」をすべて学んできました。

テーマ
1–3三角比と三角形
4–6直線・円・位置関係
7–9二次曲線・軌跡・領域
10–12ベクトル(2D・3D)
13–15複素数平面

これらは一見バラバラに見えて、実は「空間の中の点の関係」という共通のテーマでつながっています——「いろんな角度から『点がどこにあるか』を調べ続けてきた」のです。

  • 三角比 → ベクトルの内積・外積へ
  • 円の方程式 → 複素数の絶対値へ
  • 軌跡の思考 → より高度な解析幾何へ

幾何の世界は深く広いです。ここで学んだ道具を持って、ぜひさらなる数学の探求を続けてみてください。

まとめ

  • 複素数方程式 zα=r|z - \alpha| = r は中心 α\alpha、半径 rr の円を表す——「距離の定義そのまま」
  • 1 の nn 乗根は単位円上に正 nn 角形をなす——「nn 等分した回転が nn 個の解を生む」
  • 原始 nn 乗根 ω=e2πi/n\omega = e^{2\pi i/n} の和は 0:1+ω++ωn1=01 + \omega + \cdots + \omega^{n-1} = 0——「等間隔に並んだ点の重心は中心」
  • 複素数の四則演算が、幾何の変換(回転・拡大・平行移動)と一致する美しさ——「代数と幾何が一体となる瞬間」