「ほっ」と。キャンペーン

とりとめのないことを書いております。
by tempurature
カテゴリ
全体
プログラミング
scheme
verilog
未分類
以前の記事
2016年 04月
2016年 03月
2016年 02月
2016年 01月
2015年 12月
2015年 11月
2015年 10月
2015年 09月
2015年 08月
2015年 07月
2015年 06月
2015年 03月
お気に入りブログ
PHPで競技プログラミング
メモ帳
最新のトラックバック
ライフログ
検索
タグ
人気ジャンル
ブログパーツ
最新の記事
情報処理技術者試験 お疲れ様..
at 2016-04-17 18:55
基本情報技術者試験 平成27..
at 2016-04-14 04:48
基本情報技術者試験 平成27..
at 2016-04-13 23:03
苦い薬(ハーブ、サプリメント..
at 2016-04-09 14:03
「おバカ度チェックリスト」を..
at 2016-03-24 09:54
外部リンク
ファン
記事ランキング
ブログジャンル
画像一覧
B.メイヤー「オブジェクト指向入門」7.13 演習問題を解く(2)
いよいよコーディングができる課題に入りました。
とはいえ、ビルドチェックしかしていないです。

E7.2

indexing
    description: "2次元の点"
    -- (注意:EiffelStudio/このクラスのPropertiesはTransitional Syntaxに設定すること)
class POINT feature
    x: REAL
    y: REAL
        -- 横座標と縦座標
    rho: REAL is
        local
            m: SINGLE_MATH
        -- 原点(0,0)までの距離
        do
            create m
            Result := m.sqrt(x*x+y*y)
        end
    theta: REAL is
            -- 横軸に対する角度
        local
            tanval, atanval: REAL
            m :SINGLE_MATH
        do
            create m
            tanval := y / x
            atanval := m.arc_tangent(tanval)
            if tanval.is_nan then
                if x.abs < 1.0 and y.abs < 1.0 then
                    Result := 0.0
                else
                    Result := tanval.nan
                end
            elseif tanval.is_negative_infinity then
                Result := -m.pi.truncated_to_real
            elseif tanval.is_positive_infinity then
                Result := m.pi.truncated_to_real
            else
                Result := atanval
            end
        end

    distance(p: POINT): REAL is
            -- pまでの距離
        local
            m: SINGLE_MATH
        do
            create m
            Result := m.sqrt (sqr(x-p.x)+sqr(y-p.y))
        end
    translate(a, b: REAL) is
            -- 水平方向にa, 垂直方向にbだけ移動する
        do
            x := x + a
            y := y + b
        end
    scale(factor: REAL) is
            -- factorを率として拡大縮小する
        do
            x := factor * x
            y := factor * y
        end
    rotate(p: POINT; angle: REAL) is
            -- pを中心にangle度回転させる
        local
        do
            translate(-p.x, -p.y)
            rotate_around_origin(angle)
            translate(p.x, p.y)
        end
feature{POINT}
    sqr(r: REAL): REAL is
            -- 2乗する
        do
            Result := r * r
        end
    rotate_around_origin(angle: REAL) is
            -- 原点を中心にangle度回転させる
        local
            tmpx: REAL
            m: SINGLE_MATH
        do
            create m
            tmpx := rho * m.cosine (theta + angle)
            y := rho * m.sine (theta + angle)
            x := tmpx
        end

end


[PR]
by tempurature | 2016-01-12 22:46 | プログラミング
<< メイヤー教授の最新の本、「To... B.メイヤー「オブジェクト指向... >>