2010年3月4日木曜日

ピタゴラスの定理で、対角線を求める。

大画面テレビの大きさや、イメージセンサーのサイズ、画素数などなど、縦と横の長さが分かってもイマイチ大きさが実感しにくい時ってありませんか。
そんな時は、対角線の長さを求めてみると、その大きさが実感しやすいと思います。

一辺の長ささえ分かっていれば、ピタゴラスの定理で簡単に対角線が求められるので便利ですね。

これを、SQL-Server 2008 Expressで、いつでも使えるように、SQLCLRによる関数化をしてみました。


■コード(無償版のVisual C# 2008で書けます■

//------------------------------------
//対角線長算出関数
//------------------------------------
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlDouble SQLCLR_Diagonal
(SqlDouble p_x, SqlDouble p_y)
{
double dbl_result = 0;

try
{
dbl_result =
Math.Sqrt(Math.Pow((double)p_x, 2) +
Math.Pow((double)p_y, 2));
}
catch (System.Exception obj_err)
{
throw obj_err;
}

return (SqlDouble)dbl_result;
}

-- *******************************************************
-- SQLCLRの関数インターフェース
-- *******************************************************
-- ----------------------------------------------
-- 対角線長を求める
-- (パラメータ説明)
-- @p_x : 横の一辺の長さ
-- @p_y : 縦の一辺の長さ
-- ----------------------------------------------
CREATE FUNCTION SQLCLR_Diagonal(
@p_x float,
@p_y float
)
RETURNS float
AS EXTERNAL NAME ASSEMBLY_SQLCLR.CLS_SQLCLR.SQLCLR_Diagonal;
go




Windows Power Shellでも、簡単に使えるようにコマンド化してみます。
Windows7からは、
Windows Power Shellが標準搭載されているので、
本当にありがたいですよね・・・。









function global:Diagonal([Double]$p_x,[Double]$p_y)
{
return [Math]::Sqrt($([Math]::Pow($p_x,2)
+ [Math]::Pow($p_y,2)));
}