FC2ブログ
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

# 楕円の面積 Area of a Ellipse
# 引数 長軸半径 短軸半径 ($MajorAxis, $MinorAxis)
# 戻り値 楕円の面積 (@Ellipse)
sub ELLIPSE{
my ($MajorAxis, $MinorAxis) = @_;
my @Ellipse = ();
my $Pi = atan2(1, 1) * 4;
($MajorAxis, $MinorAxis) = ($MinorAxis, $MajorAxis) if($MajorAxis < $MinorAxis);

# 長軸半径 短軸半径の確認
if(($MajorAxis <= 0) || ($MinorAxis <= 0)){
return 0;
}

# 楕円の面積 Area of a Ellipse
# [0] 楕円の面積 [1] 円弧の長さ [2] 楕円率 [3] 焦点 [4] 重心位置の高さ [5] 断面二次モーメント [6] 断面係数 [7] 断面二次半径
$Ellipse[0] = $MajorAxis * $MinorAxis * $Pi;
$Ellipse[1] = 4 * $MajorAxis * &COMPLETEELLIPTICINTEGRALSECOND(sqrt(1 - (($MinorAxis/ $MajorAxis) * ($MinorAxis/ $MajorAxis))));
$Ellipse[2] = $MinorAxis / $MajorAxis;
$Ellipse[3] = sqrt(($MajorAxis * $MajorAxis) - ($MinorAxis * $MinorAxis));
$Ellipse[4] = $MinorAxis / 2;
$Ellipse[5] = ($Pi * $MajorAxis * ($MinorAxis * $MinorAxis * $MinorAxis)) / 64;
$Ellipse[6] = ($Pi * $MajorAxis * ($MinorAxis * $MinorAxis)) / 32;
$Ellipse[7] = $MinorAxis / 4;

return @Ellipse;
}

# 第二種完全楕円積分 Complete Elliptic Integral of the Second Kind
# 引数 値 ($K)
# 戻り値 第二種完全楕円積分 ($CompleteEllipticIntegralOfTheSecondKind)
sub COMPLETEELLIPTICINTEGRALSECOND{
my ($K) = @_;
my $CompleteEllipticIntegralOfTheSecondKind = 0;
my $SimpsonsRule = 0;
my $Pi= atan2(1, 1) * 4;
my $a = 0;
my $b = $Pi / 2;
my $N = 1000;
my $h = ($b - $a) / $N;
my $Sum = 0;
my $SumA = 0;
my $SumB = 0;

# 値の確認
if(($K < -1) || (1 < $K)){
return 0;
}

# シンプソンの公式 Simpson's Rule
$SumA = &INTEGRAND($K, $a);
$SumB = &INTEGRAND($K, $b);

for(my $i = 1; $i < $N; $i++){
my $T = $a + ($i * $h);
my $num = ($i % 2 == 0 ? 2 : 4);
my $tmp = &INTEGRAND($K, $T);

$Sum += $num * $tmp;
}

# シンプソンの公式 Simpson's Rule
$SimpsonsRule = ($SumA + $Sum + $SumB) * ($h / 3);

# 第二種完全楕円積分 Complete Elliptic Integral of the Second Kind
$CompleteEllipticIntegralOfTheSecondKind = $SimpsonsRule;

return $CompleteEllipticIntegralOfTheSecondKind;
}

# 被積分関数 Integrand
# 引数 変数 変数 ($K, $T)
# 戻り値 被積分関数 ($Function)
sub INTEGRAND{
my ($K, $T) = @_;
my $Function = 0;
my $Sin = sin($T);

# 被積分関数 Integrand
$Function = sqrt(1 - (($K * $K) *($Sin * $Sin)));

return $Function;
}


参考URL
楕円の面積 - 高精度計算サイト
楕円 - Wikipedia
第2種完全楕円積分 E(k) - 高精度計算サイト
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

Author:雨宮
Firefoxを使用しているので気づかなかったけど、IE6でソースコードを上手くコピーできない

5/3
携帯用ならIE6でもソースコードをコピーできる
携帯用

検索フォーム


あわせて読みたいブログパーツ
一寸先は闇 RSS

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。