円の面積

まだ未検証

円周長を半径r分走査する

円の円周長は$${2\pi r}$$
半径$${r}$$を拡大しながら円の面積を成すと考えると

$$
\text{面積} = \int_{0}^{r} 2\pi x dx
$$

$${2\pi x}$$ の $${x}$$ に関する不定積分を求めます。$${x^n}$$ の不定積分は $${\frac{1}{n+1} x^{n+1}}$$ です。ここで $${n=1}$$ なので、$${2\pi x}$$ の不定積分は $${\pi x^2}$$ になります。

次に、この不定積分に上限 $${r}$$ と下限 $${0}$$ を適用します。

$$
\int_{0}^{r} 2\pi x dx = \left[ \pi x^2 \right]_0^r = \pi r^2 - \pi \cdot 0^2 = \pi r^2
$$

したがって、この積分の結果は $${\pi r^2}$$ で、これは円の面積の公式と一致します。

微小な直角三角形を円周長2pir分走査する

半径を$${r}$$
円周長を$${2\pi r}$$とし、
円周長の微小辺を$${dx}$$とした時、
半径と微小辺の成す直角三角形は$${\frac{1}{2}r}$$

この直角三角形を円周長が0から$${2\pi r}$$になるまで全部足すと

$$
\int_{0}^{2\pi r} \frac{1}{2}r dx = \frac{1}{2}r \int_{0}^{2\pi r} dx = \frac{1}{2}r [x]_{0}^{2\pi r} = \frac{1}{2}r [2\pi r - 0] = \pi r^2
$$

円弧の面積を一周2pi分走査する

円周長$${2\pi r}$$
微小な回転角$${d\theta}$$
一周$${2\pi}$$と微小な回転角$${d\theta}$$の比$${\frac{d\theta}{2\pi}}$$
微小に回転した分の弧長$${2\pi r \frac{d\theta}{2\pi}=rd\theta}$$

半径は$${r}$$だから微小に回転した円弧の面積は

$$
2\pi r \frac{d\theta}{2\pi} r=r d\theta r = r^2d\theta
$$

を$${\frac{1}{2}}$$した$${ \frac{1}{2}r^2d\theta}$$
ここで半分こするのは三角形と同じ要領。

これを0から$${2\pi}$$まで回転させると

$$
\int_{0}^{2\pi} \frac{1}{2}r^2 d\theta
$$

$$
\frac{1}{2} r^2 \int_{0}^{2\pi} d\theta=\frac{1}{2} r^2 [ \theta ]_{0}^{2\pi} = \frac{1}{2} r^2 (2\pi) = \pi r^2
$$


象限ごと

半径 $${r}$$ の円の方程式は $${x^2 + y^2 = r^2}$$ です。
これを変形すると

$${y=\sqrt{r^2-x^2}\quad (-r\leq x \leq r)}$$

円の面積を求めるためには、円の方程式に基づいて円の一部の面積を積分で計算し、それを適切に何倍かして全体の面積を求めます。

円の第一象限の部分の面積 $${A_1}$$ は以下の積分で表されます。

$$
 A_1 = \int_{0}^{r} \sqrt{r^2 - x^2}  dx 
$$

全円の面積 $${A}$$ を求めるには、この結果に 4 を掛けます。

$$
 A = 4A_1 = 4 \int_{0}^{r} \sqrt{r^2 - x^2}  dx 
$$

この積分を解くために、置換積分の方法を用います。$${x = r \sin \theta}$$ と置換することで、積分を扱いやすくします。

$${\sin \theta}$$のでどころを考えます。
2次元座標$${(x,y)}$$は極座標で表すと$${(r \cos\theta, r \sin\theta)}$$。
本来素直に$${x = r \cos \theta}$$に置き換えたい所ですが、そうすると先の計算が難しいので、どのみち計算結果は変わらないという理由から$${x = r \sin \theta}$$にしてしまいます。

結局積分するので、以下の式の数学的厳密さはさておいて出力は同じです。

$$
 A_1 = \int_{0}^{r} \sqrt{r^2 - (r \cos \theta)^2}  dx =  \int_{0}^{r} \sqrt{r^2 - (r \sin \theta)^2} dx 
$$

今、$${x=r \sin\theta}$$と置いたので、これを微分すると

$${\frac{dx}{d\theta}=r \cos\theta}$$
$${dx = r \cos \theta d\theta}$$

この置換によって積分変数が$${dx}$$から$${d\theta}$$に替わります。
積分の範囲は変わったように見せて、変更された積分変数がきっちり第一象限をカバーするための範囲に置き換わるだけです。

この変換を数学的な厳密さを抜きにしてコマ送りにすると

$${ A_1 = \int_{0}^{r} \sqrt{r^2 - x^2}  dx }$$
$${ A_1 = \int_{0}^{r} \sqrt{r^2 - (r \cos\theta)^2}  dx }$$
$${ A_1 = \int_{0}^{r} \sqrt{r^2 - (r \sin\theta)^2}  dx }$$
$${ A_1 = \int_{0}^{\frac{\pi}{2}} \sqrt{r^2 - (r \sin\theta)^2}  r \cos \theta d\theta }$$

ここで、$${\sqrt{r^2 - (r \sin \theta)^2}}$$ は $${\sqrt{r^2(1 - \sin^2 \theta)})}$$と変形でき、$${\sin^2 \theta + \cos^2 \theta = 1}$$ から $${\sqrt{r^2 \cos^2 \theta} = r \cos \theta}$$ になります。よって、

$$
 A = 4 \int_{0}^{\frac{\pi}{2}} r^2 \cos^2 \theta , d\theta 
$$

さらに、この積分を解くと、

$$
 A = 4r^2 \left[ \frac{\theta}{2} + \frac{\sin(2\theta)}{4} \right]_{0}^{\frac{\pi}{2}} = 4r^2 \left( \frac{\pi}{4} + 0 - 0 \right) = \pi r^2
$$

これを計算すると、$${A = \pi r^2}$$ となります。これは円の面積を表す公式です。

楕円

楕円の方程式は、中心が原点で、主軸が座標軸に平行な場合、次のように表されます。

$$
\frac{x^2}{a^2} + \frac{y^2}{b^2} = 1
$$

ここで、$${a}$$ は水平軸の半径、$${b}$$ は垂直軸の半径です。この楕円の面積 $${A}$$ を求めるために、楕円の一部の面積を積分で計算し、それを適切に何倍かして全体の面積を求めます。

楕円の第一象限の部分の面積 $${A_1}$$ は以下の積分で表されます。

$$
A_1 = \int_{0}^{a} \frac{b}{a}\sqrt{a^2 - x^2} dx
$$

ここで、$${\frac{b}{a}\sqrt{a^2 - x^2}}$$ は、楕円の方程式から $${y}$$ を求めたものになります。全楕円の面積 $${A}$$ を求めるには、この結果に 4 を掛けます。

$$
A = 4A_1 = 4\int_{0}^{a} \frac{b}{a}\sqrt{a^2 - x^2} dx
$$

この積分を解くために、置換積分の方法を用います。$${x = a \sin \theta}$$ と置換することで、積分を扱いやすくします。これにより、$${dx = a \cos \theta d\theta}$$ となります。

したがって、積分は次のように変形されます。

$$
A = 4\int_{0}^{\frac{\pi}{2}} \frac{b}{a} \sqrt{a^2 - (a \sin \theta)^2} \cdot a \cos \theta d\theta
$$

ここで、$${\sqrt{a^2 - (a \sin \theta)^2}}$$ は $${\sqrt{a^2(1 - \sin^2 \theta)}}$$ になります。そして、$${\sin^2 \theta + \cos^2 \theta = 1}$$ を用いて、この式は $${a \cos \theta}$$ に変形できます。よって、

$$
A = 4\int_{0}^{\frac{\pi}{2}} b \cos^2 \theta d\theta
$$

この積分を解くためには、$${\cos^2 \theta}$$ の積分を計算します。一般に、$${\cos^2 \theta}$$ の積分は、$${\frac{1}{2}(1 + \cos(2\theta))}$$ を用いて計算することができます。したがって、

$$
A = 4b\int_{0}^{\frac{\pi}{2}} \frac{1}{2} d\theta = 2b\left[ \theta \right]_{0}^{\frac{\pi}{2}} = 2b \cdot \frac{\pi}{2} = \pi ab
$$

これが、主軸が座標軸に平行な楕円の面積の公式です。



3点通る円

2点だけだと円は一意に定まらないが、3点あると定まる。

3点$${(x_1, y_1), (x_2, y_2), (x_3, y_3)}$$を通る円の中心$${(a, b)}$$と半径$${r}$$を求める式を導出するには、まず3点が円上にあるという条件から出発します。円の方程式は以下のように表されます。

$$
(x - a)^2 + (y - b)^2 = r^2
$$

ここで、$${(a, b)}$$は円の中心で、$${r}$$は半径です。この方程式を3点に対して適用し、以下の3つの方程式を得ます。

$$
(x_1 - a)^2 + (y_1 - b)^2 = r^2\\
(x_2 - a)^2 + (y_2 - b)^2 = r^2\\
(x_3 - a)^2 + (y_3 - b)^2 = r^2
$$

これら3つの方程式から、$${r^2}$$を消去するために、それぞれの方程式をペアで引き算します。結果、次の2つの方程式を得ます。

$$
(x_1 - a)^2 - (x_2 - a)^2 + (y_1 - b)^2 - (y_2 - b)^2 = 0\\
(x_1 - a)^2 - (x_3 - a)^2 + (y_1 - b)^2 - (y_3 - b)^2 = 0
$$

これを展開し、整理すると、$${a}$$と$${b}$$について解くことができる2つの線形方程式が得られます。これらの方程式をさらに解いて、中心$${(a, b)}$$を求めることができます。そして、いずれかの点を用いて(r)の値を計算できます。

このプロセスを数学的に厳密に行うには、上記の展開と整理が必要ですが、結果的には以下の形式で中心と半径を表すことができます。

$$
a = \frac{D \cdot E - B \cdot F}{G}\\
b = \frac{A \cdot F - C \cdot E}{G}\\
r = \sqrt{(x_1 - a)^2 + (y_1 - b)^2}
$$

ここで、

$$
A = x_1 - x_2, \quad B = y_1 - y_2, \quad C = x_1 - x_3, \quad D = y_1 - y_3\\
E = A \cdot (x_1 + x_2) + B \cdot (y_1 + y_2), \quad F = C \cdot (x_1 + x_3) + D \cdot (y_1 + y_3)\\
G = 2 \cdot (A \cdot (y_3 - y_2) - B \cdot (x_3 - x_2))
$$

そのコード(未テスト)

function calculateCircle(x1, y1, x2, y2, x3, y3) {
  const A = x1 - x2;
  const B = y1 - y2;
  const C = x1 - x3;
  const D = y1 - y3;
  const E = A * (x1 + x2) + B * (y1 + y2);
  const F = C * (x1 + x3) + D * (y1 + y3);
  const G = 2 * (A * (y3 - y2) - B * (x3 - x2));

  if (G === 0) {
    throw new Error("Points are collinear or too close together.");
  }

  const centerX = (D * E - B * F) / G;
  const centerY = (A * F - C * E) / G;
  const radius = Math.sqrt(Math.pow(x1 - centerX, 2) + Math.pow(y1 - centerY, 2));

  return {
    centerX,
    centerY,
    radius
  };
}

// 使用例
const point1 = { x: 0, y: 0 };
const point2 = { x: 4, y: 0 };
const point3 = { x: 2, y: Math.sqrt(12) }; // 高さが√12の正三角形の頂点

const { centerX, centerY, radius } = calculateCircle(point1.x, point1.y, point2.x, point2.y, point3.x, point3.y);

console.log(`Center: (${centerX}, ${centerY}), Radius: ${radius}`);

3点通る楕円

楕円の一般式は次のように表されます:
$${ Ax^2 + Bxy + Cy^2 + Dx + Ey + F = 0 }$$

ここで、$${A,B,C,D,E,F}$$は楕円のパラメータです。3点$${(x_1, y_1)), ((x_2, y_2)), ((x_3, y_3)}$$が与えられたとき、これらの点を通る楕円の方程式を満たすパラメータを求めるには、これらの座標を楕円の方程式に代入し、連立方程式を解く必要があります。

以下に、この問題を解くためのJavaScriptコードの例を示します。この例では、数値計算ライブラリは使用せず、JavaScriptの基本的な機能のみを使って連立方程式を解きます。実際のアプリケーションでは、数値的安定性や効率のために、数値計算ライブラリ(例えば、math.js)の使用を検討すると良いでしょう。

未テスト

function solveEllipseParameters(x1, y1, x2, y2, x3, y3) {
    // 連立方程式を構築
    const matrix = [
        [x1*x1, x1*y1, y1*y1, x1, y1, 1],
        [x2*x2, x2*y2, y2*y2, x2, y2, 1],
        [x3*x3, x3*y3, y3*y3, x3, y3, 1],
    ];
    const results = [0, 0, 0];

    // ガウスの消去法を使用して連立方程式を解く(簡易実装)
    for (let i = 0; i < 3; i++) {
        // 対角要素を1にする
        const divisor = matrix[i][i];
        for (let j = 0; j <= 5; j++) {
            matrix[i][j] /= divisor;
        }
        results[i] /= divisor;

        // 他の行からi行目の値を引くことで、i列目を0にする
        for (let k = 0; k < 3; k++) {
            if (k !== i) {
                const factor = matrix[k][i];
                for (let j = 0; j <= 5; j++) {
                    matrix[k][j] -= factor * matrix[i][j];
                }
                results[k] -= factor * results[i];
            }
        }
    }

    // この簡易実装では、解が一意に決まるケースのみを扱っています
    // 実際には、より複雑なケースを処理するために、数値計算ライブラリの使用を検討してください
    return {
        A: matrix[0][0],
        B: matrix[0][1],
        C: matrix[0][2],
        D: matrix[0][3],
        E: matrix[0][4],
        F: -1 // Fは他のパラメータとの相対的な値であり、通常は-1に設定されます
    };
}

// 使用例
const params = solveEllipseParameters(1, 2, 3, 4, 5, 6);
console.log(params);



この記事が気に入ったらサポートをしてみませんか?