Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で解く:半円に内接する正方形の中に収まる最大のルーロー三角形の面積

ルーロー三角形(Reuleaux triangle)は、3つの円の共通部分として形成される図形です。それぞれの円の中心が、他の2つの円の境界上に位置するように描きます。その境界は定幅曲線(constant width curve)と呼ばれ、円を除けば最も単純でよく知られた定幅曲線です。

ここでいう「定幅」とは、図形を挟む2本の平行な支持線の間隔が、どの向きで測っても常に一定であることを意味します。言い換えれば、あらゆる方向の幅(直径)が等しいということです。

C言語で解く:半円に内接する正方形の中に収まる最大のルーロー三角形の面積

ルーロー三角形の境界は、正三角形をもとにした定幅曲線になっています。一辺上のすべての点は、対向する頂点から等距離にあります。

C言語で解く:半円に内接する正方形の中に収まる最大のルーロー三角形の面積

ルーロー三角形の作り方

正三角形の各頂点を中心とし、その頂点から他の2頂点までの距離(=一辺の長さ)を半径とする円弧を描き、3つの円弧をつなぎ合わせることでルーロー三角形が得られます。

ルーロー三角形の面積公式

一辺の長さが h の正三角形をもとにしたルーロー三角形の面積は、次の式で表されます。

A = (π × h²) / 2 − 2 ×(正三角形の面積)= (π − √3) × h² / 2 ≈ 0.70477 × h²

半円に内接する正方形、さらにその中の最大ルーロー三角形

半径 r の半円に内接する正方形があり、さらにその正方形に内接する最大のルーロー三角形を考えると、下の図のようになります。

C言語で解く:半円に内接する正方形の中に収まる最大のルーロー三角形の面積

まず、半円に内接する最大の正方形について考えます。下の図のように配置されます。

C言語で解く:半円に内接する正方形の中に収まる最大のルーロー三角形の面積

r を半円の半径、a を正方形の一辺の長さとします。直角三角形 AOB において三平方の定理より、

a² + (a/2)² = r²

5 × (a²/4) = r²

a² = 4r²/5 …これが正方形の面積になります

C言語で解く:半円に内接する正方形の中に収まる最大のルーロー三角形の面積

次に、正方形の中に収まる最大のルーロー三角形を考えます。ルーロー三角形の面積は 0.70477 × b² で表されます。ここで b は、ルーロー三角形を挟む平行な支持線同士の距離(幅)です。

この支持線間の距離は、正方形の一辺の長さ a に等しくなります。したがって、

ルーロー三角形の面積 A = 0.70477 × a²

入力:r = 5
出力:14.0954

解説

半径 r の半円に内接する正方形、さらにその中に内接するルーロー三角形を考え、このルーロー三角形の最大面積を求めます。

半円に内接する正方形の一辺の長さは、a = 2r/√5 となります。

x = a = 2r/√5

ルーロー三角形の面積は、

A = 0.70477 × x² = 0.70477 × (4r²/5)

C言語での実装例

#include <stdio.h>
#include <math.h>
int main() {
    float r = 5;
    float x = (2 * r) / sqrt(5);
    float A = 0.70477 * pow(x, 2);
    printf("The area is %f", A);
    return 0;
}

出力結果

The area is 14.095401
  1. ルーロー三角形の面積の求め方|公式の導出とC++での計算例

    本記事では、下図のようなルーロー三角形の面積を求める方法を解説します。ルーロー三角形の内部には一辺の長さが等しい正三角形が含まれており、その高さを h とします。この図形は、正三角形の各頂点を中心とした3つの円が重なり合った部分(共通部分)として作られます。ルーロー三角形とはルーロー三角形は、正三角形の3つの頂点をそれぞれ中心とし、頂点間の距離を半径とする3つの円の交わりでできる図形です。どの方向から測っても幅が一定になる「定幅図形」の最も簡単な例として知られており、マンホールの蓋や一部の工具などにも応用されています。面積の導出方法ルーロー三角形の面積は、3つの扇形(おうぎ形)に分解して考える

  2. 半円に内接する長方形に内接する円の面積の求め方

    半径 R の半円が与えられているとします。この半円の中に、長さ l、幅 b の長方形が内接しており、さらにその長方形の中に半径 r の円が内接しています。本記事では、この内側の円の面積を求める手順を、数式の導出からC++による実装例までわかりやすく解説します。 半円に内接する最大の長方形 半円に内接する長方形は、底辺が半円の直径上にあり、上側の2つの頂点が半円周上にあります。このとき、三平方の定理(ピタゴラスの定理)より、l と b の間には次の関係が成り立ちます。 (l / 2)2 + b2 = R2 長方形の面積 A = l × b を最大化する条件を求めると、微分計算により次の値が