Class: Miyako::Segments
Overview
X方向・Y方向線分の区間情報を操作するクラス
本クラスでは、X方向・Y方向2つのSegmentを管理する。 位置変更メソッドを追加
Instance Attribute Summary collapse
- #x ⇒ Object readonly
- #y ⇒ Object readonly
Class Method Summary collapse
-
.create(rect) ⇒ Object
矩形情報からSegmentsインスタンスを生成する 入力した矩形情報(Rect構造体、で表される配列)から、構造体インスタンスを生成する (前バージョンまでの互換性のために残している) rect:: 算出に使用する矩形情報 返却値:: 生成したインスタンスを返す.
Instance Method Summary collapse
-
#[](idx) ⇒ Object
インデックスから対象のSegment構造体を取得する インデックスの値に対応した 上記以外のインデックスを渡したときはnilを返す Segmentsは以前構造体だったため、互換性のために用意している idx:: Segmentを指すインデックス 返却値:: インデックスに対応したSegment構造体(対応していないインデックスの時はnil).
-
#between?(x, y) ⇒ Boolean
値がともに線分の範囲内かどうかを判別する x,yの値がともにminとmaxの値の範囲内にあるかどうかを判別する。範囲内にあればtrueを返す 値がminもしくはmaxに等しいときもtrueを返す x:: x方向の値 y:: y方向の値 返却値:: x,yが範囲内のときはtrue、範囲外の時はfalseを返す.
-
#in_bounds?(idx, big_segment, d, flag = false) ⇒ Boolean
小線分を移動させたとき、大線分が範囲内かどうかを判別する 移動後の小線分が大線分の範囲内にあるかどうかをtrue/falseで取得する idx:: 判別する方向(xもしくはy)。:x, :y, 0, 1のどれかを渡す。それ以外を渡すと例外が発生する big_segment:: 大線分の範囲。で構成された2要素の配列 d:: selfの移動量 flag:: 大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse 返却値:: 範囲内のときはtrue、範囲外の時はfalseを返す.
-
#in_bounds_ex?(idx, big_segment, d, flag = false) ⇒ Boolean
小線分を移動させたとき、大線分が範囲内かどうかを判別して、その状態によって値を整数で返す 移動後の小線分の範囲が大線分の範囲内のときは0、 マイナス方向で範囲外に出るときは-1、 プラス方向で出るときは1を返す idx:: 判別する方向(xもしくはy)。:x, :y, 0, 1のどれかを渡す。それ以外を渡すと例外が発生する big_segment:: 大線分の範囲。で構成された2要素の配列 d:: selfの移動量 flag:: 大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse 返却値:: 判別の結果.
-
#in_bounds_rev?(idx, big_segment, d, flag = false) ⇒ Boolean
移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す 移動後の小線分の範囲が大線分の範囲内のときは0、 マイナス方向で範囲外に出るときは1、 プラス方向で出るときは-1を返す idx:: 判別する方向(xもしくはy)。:x, :y, 0, 1のどれかを渡す。それ以外を渡すと例外が発生する big_segment:: 大線分の範囲。で構成された2要素の配列 d:: selfの移動量 flag:: 大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse 返却値:: 判別の結果.
-
#in_bounds_rev_ex?(idx, big_segment, d, flag = false) ⇒ Boolean
移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す 移動量が0のときは0、 移動後の小線分の範囲が大線分の範囲内のときは1、 範囲外に出るときは-1を返す idx:: 判別する方向(xもしくはy)。:x, :y, 0, 1のどれかを渡す。それ以外を渡すと例外が発生する big_segment:: 大線分の範囲。で構成された2要素の配列 d:: selfの移動量 flag:: 大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse 返却値:: 判別の結果.
-
#in_edge?(x, y) ⇒ Boolean
値がともに線分の端かどうかを判別する x,yの値がともにminもしくはmaxと等しければtrueを返す x:: x方向の値 y:: y方向の値 返却値:: x,yがminもしくはmaxと等しければtrue、それ以外の時はfalseを返す.
-
#in_range?(x, y) ⇒ Boolean
値がともに線分の範囲内かどうかを判別する x,yの値がともにminとmaxの値の範囲内にあるかどうかを判別する。範囲内にあればtrueを返す 値がminもしくはmaxに等しいときもtrueを返す x:: x方向の値 y:: y方向の値 返却値:: x,yが範囲内のときはtrue、範囲外の時はfalseを返す.
-
#initialize(*params) ⇒ Segments
constructor
矩形情報からSegmentsインスタンスを生成する 入力した情報から、Segment構造体二つを持ったインスタンスを生成する 引数には、Rect構造体、Square構造体、[(x),(y)],[min_x,max_x,min_y,max_y]の形式を持つ.
-
#max?(x, y) ⇒ Boolean
値がともに最大値かどうかを判別する 値がmaxと等しければtrueを返す x:: x方向の値 y:: y方向の値 返却値:: x,yがmaxと等しければtrue、それ以外の時はfalseを返す.
-
#min?(x, y) ⇒ Boolean
値がともに最小値かどうかを判別する 値がminと等しければtrueを返す x:: x方向の値 y:: y方向の値 返却値:: x,yがminと等しければtrue、それ以外の時はfalseを返す.
-
#move(dx, dy) ⇒ Object
位置を変更したインスタンスを返す(変化量を指定) 引数で指定したぶん移動させたときの位置を新しくインスタンスを生成して返す 自分自身の値は変わらない dx:: 移動量(x方向)。単位はピクセル dy:: 移動量(y方向)。単位はピクセル 返却値:: 自分自身の複製を更新したインスタンス.
-
#move!(dx, dy) ⇒ Object
位置を変更する(変化量を指定) ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す dx:: 移動量(x方向)。単位はピクセル dy:: 移動量(y方向)。単位はピクセル 返却値:: 自分自身を返す.
-
#move_to(x, y) ⇒ Object
位置を変更したインスタンスを返す(位置指定) 引数で指定したぶん移動させたときの位置を新しくインスタンスを生成して返す 自分自身の値は変わらない x:: 移動先位置(x方向)。単位はピクセル y:: 移動先位置(y方向)。単位はピクセル 返却値:: 自分自身の複製を更新したインスタンス.
-
#move_to!(x, y) ⇒ Object
位置を変更する(位置指定) ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す x:: 移動先位置(x方向)。単位はピクセル y:: 移動先位置(y方向)。単位はピクセル 返却値:: 自分自身を返す.
-
#reset!(min_x, max_x, min_y, max_y) ⇒ Object
線分情報を変更する x,yそれぞれのminとmaxを一緒に更新する min>maxのときは、それぞれの値を入れ替える min_x:: x方向の線分の最小値 max_x:: x方向の線分の最大値 min_y:: y方向の線分の最小値 max_y:: y方向の線分の最大値 返却値:: 自分自身.
-
#resize(dw, dh) ⇒ Object
サイズを変更したインスタンスを返す(変化量を指定) 引数で指定したぶん変えたときの大きさを新しくインスタンスを生成して返す 自分自身の値は変わらない dw:: 幅変更。単位はピクセル dh:: 高さ変更。単位はピクセル 返却値:: 自分自身の複製を更新したインスタンス.
-
#resize!(dw, dh) ⇒ Object
サイズを変更する(変化量を指定) ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す dw:: 幅変更。単位はピクセル dh:: 高さ変更。単位はピクセル 返却値:: 自分自身を返す.
-
#resize_to(w, h) ⇒ Object
サイズを変更したインスタンスを返す 引数で指定したぶん変えたときの大きさを新しくインスタンスを生成して返す 自分自身の値は変わらない w:: 幅変更。単位はピクセル h:: 高さ変更。単位はピクセル 返却値:: 自分自身の複製を更新したインスタンス.
-
#resize_to!(w, h) ⇒ Object
サイズを変更する ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す w:: 幅変更。単位はピクセル h:: 高さ変更。単位はピクセル 返却値:: 自分自身を返す.
-
#to_ary ⇒ Object
線分情報を配列に変換する [[min, max],[min, max]]の配列を生成して返す。 返却値:: 生成した配列.
Constructor Details
#initialize(*params) ⇒ Segments
矩形情報からSegmentsインスタンスを生成する
入力した情報から、Segment構造体二つを持ったインスタンスを生成する 引数には、Rect構造体、Square構造体、[(x),(y)],[min_x,max_x,min_y,max_y]の形式を持つ
引数を省略したときはすべて0のSegment構造体を持つ また、引数が3つ、5つ以上の時はMiyakoValueError例外が発生する
- params
-
情報を渡す引数(複数可)
- 返却値
-
生成したインスタンスを返す
378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 |
# File 'lib/Miyako/API/struct_segment.rb', line 378 def initialize(*params) case params.length when 0 @x = Segment.new(0,0) @y = Segment.new(0,0) when 1 pm = params[0] if pm.is_a?(Rect) @x = Segment.new(pm[0], pm[0] + pm[2] - 1) @y = Segment.new(pm[1], pm[1] + pm[3] - 1) elsif pm.is_a?(Square) || (pm.is_a?(Array) && pm.length==4) @x = Segment.new(pm[0], pm[2]) @y = Segment.new(pm[1], pm[3]) else @x = Segment.new(pm[0][0],pm[0][1]) @y = Segment.new(pm[1][0],pm[1][1]) end when 2 @x = Segment.new(params[0][0],params[0][1]) @y = Segment.new(params[1][0],params[1][1]) when 4 @x = Segment.new(params[0],params[1]) @y = Segment.new(params[2],params[3]) else raise MiyakoValueError, "illegal params : params is 0,1,2,4! params = #{params.length}" end end |
Instance Attribute Details
#x ⇒ Object (readonly)
352 353 354 |
# File 'lib/Miyako/API/struct_segment.rb', line 352 def x @x end |
Class Method Details
.create(rect) ⇒ Object
矩形情報からSegmentsインスタンスを生成する
入力した矩形情報(Rect構造体、で表される配列)から、構造体インスタンスを生成する (前バージョンまでの互換性のために残している)
- rect
-
算出に使用する矩形情報
- 返却値
-
生成したインスタンスを返す
365 366 367 368 |
# File 'lib/Miyako/API/struct_segment.rb', line 365 def Segments.create(rect) return Segments.new(Segment.new(rect[0], rect[0] + rect[2] - 1), Segment.new(rect[1], rect[1] + rect[3] - 1)) end |
Instance Method Details
#[](idx) ⇒ Object
インデックスから対象のSegment構造体を取得する
インデックスの値に対応した 上記以外のインデックスを渡したときはnilを返す Segmentsは以前構造体だったため、互換性のために用意している
- idx
-
Segmentを指すインデックス
- 返却値
-
インデックスに対応したSegment構造体(対応していないインデックスの時はnil)
412 413 414 415 416 417 418 419 420 421 |
# File 'lib/Miyako/API/struct_segment.rb', line 412 def [](idx) case idx when 0, :x return @x when 1, :y return @y else return nil end end |
#between?(x, y) ⇒ Boolean
値がともに線分の範囲内かどうかを判別する
x,yの値がともにminとmaxの値の範囲内にあるかどうかを判別する。範囲内にあればtrueを返す 値がminもしくはmaxに等しいときもtrueを返す
- x
-
x方向の値
- y
-
y方向の値
- 返却値
-
x,yが範囲内のときはtrue、範囲外の時はfalseを返す
543 544 545 |
# File 'lib/Miyako/API/struct_segment.rb', line 543 def between?(x, y) in_range?(x, y) end |
#in_bounds?(idx, big_segment, d, flag = false) ⇒ Boolean
小線分を移動させたとき、大線分が範囲内かどうかを判別する
移動後の小線分が大線分の範囲内にあるかどうかをtrue/falseで取得する
- idx
-
判別する方向(xもしくはy)。:x, :y, 0, 1のどれかを渡す。それ以外を渡すと例外が発生する
- big_segment
-
大線分の範囲。で構成された2要素の配列
- d
-
selfの移動量
- flag
-
大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse
- 返却値
-
範囲内のときはtrue、範囲外の時はfalseを返す
581 582 583 584 |
# File 'lib/Miyako/API/struct_segment.rb', line 581 def in_bounds?(idx, big_segment, d, flag = false) raise MiyakoError, "illegal index : #{idx}" unless [0,1,:x,:y].include?(idx) return self[idx].in_bounds?(big_segment[idx], d, flag) end |
#in_bounds_ex?(idx, big_segment, d, flag = false) ⇒ Boolean
小線分を移動させたとき、大線分が範囲内かどうかを判別して、その状態によって値を整数で返す
移動後の小線分の範囲が大線分の範囲内のときは0、 マイナス方向で範囲外に出るときは-1、 プラス方向で出るときは1を返す
- idx
-
判別する方向(xもしくはy)。:x, :y, 0, 1のどれかを渡す。それ以外を渡すと例外が発生する
- big_segment
-
大線分の範囲。で構成された2要素の配列
- d
-
selfの移動量
- flag
-
大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse
- 返却値
-
判別の結果
595 596 597 598 |
# File 'lib/Miyako/API/struct_segment.rb', line 595 def in_bounds_ex?(idx, big_segment, d, flag = false) raise MiyakoError, "illegal index : #{idx}" unless [0,1,:x,:y].include?(idx) return self[idx].in_bounds_ex?(big_segment[idx], d, flag) end |
#in_bounds_rev?(idx, big_segment, d, flag = false) ⇒ Boolean
移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す
移動後の小線分の範囲が大線分の範囲内のときは0、 マイナス方向で範囲外に出るときは1、 プラス方向で出るときは-1を返す
- idx
-
判別する方向(xもしくはy)。:x, :y, 0, 1のどれかを渡す。それ以外を渡すと例外が発生する
- big_segment
-
大線分の範囲。で構成された2要素の配列
- d
-
selfの移動量
- flag
-
大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse
- 返却値
-
判別の結果
609 610 611 612 |
# File 'lib/Miyako/API/struct_segment.rb', line 609 def in_bounds_rev?(idx, big_segment, d, flag = false) raise MiyakoError, "illegal index : #{idx}" unless [0,1,:x,:y].include?(idx) return self[idx].in_bounds_rev?(big_segment[idx], d, flag) end |
#in_bounds_rev_ex?(idx, big_segment, d, flag = false) ⇒ Boolean
移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す
移動量が0のときは0、 移動後の小線分の範囲が大線分の範囲内のときは1、 範囲外に出るときは-1を返す
- idx
-
判別する方向(xもしくはy)。:x, :y, 0, 1のどれかを渡す。それ以外を渡すと例外が発生する
- big_segment
-
大線分の範囲。で構成された2要素の配列
- d
-
selfの移動量
- flag
-
大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse
- 返却値
-
判別の結果
623 624 625 626 |
# File 'lib/Miyako/API/struct_segment.rb', line 623 def in_bounds_rev_ex?(idx, big_segment, d, flag = false) raise MiyakoError, "illegal index : #{idx}" unless [0,1,:x,:y].include?(idx) return self[idx].in_bounds_rev_ex?(big_segment[idx], d, flag) end |
#in_edge?(x, y) ⇒ Boolean
値がともに線分の端かどうかを判別する
x,yの値がともにminもしくはmaxと等しければtrueを返す
- x
-
x方向の値
- y
-
y方向の値
- 返却値
-
x,yがminもしくはmaxと等しければtrue、それ以外の時はfalseを返す
552 553 554 |
# File 'lib/Miyako/API/struct_segment.rb', line 552 def in_edge?(x, y) @x.in_edge?(x) && @y.in_edge?(y) end |
#in_range?(x, y) ⇒ Boolean
値がともに線分の範囲内かどうかを判別する
x,yの値がともにminとmaxの値の範囲内にあるかどうかを判別する。範囲内にあればtrueを返す 値がminもしくはmaxに等しいときもtrueを返す
- x
-
x方向の値
- y
-
y方向の値
- 返却値
-
x,yが範囲内のときはtrue、範囲外の時はfalseを返す
533 534 535 |
# File 'lib/Miyako/API/struct_segment.rb', line 533 def in_range?(x, y) @x.in_range?(x) && @y.in_range?(y) end |
#max?(x, y) ⇒ Boolean
値がともに最大値かどうかを判別する
値がmaxと等しければtrueを返す
- x
-
x方向の値
- y
-
y方向の値
- 返却値
-
x,yがmaxと等しければtrue、それ以外の時はfalseを返す
570 571 572 |
# File 'lib/Miyako/API/struct_segment.rb', line 570 def max?(x, y) @x.max?(x) && @y.max?(y) end |
#min?(x, y) ⇒ Boolean
値がともに最小値かどうかを判別する
値がminと等しければtrueを返す
- x
-
x方向の値
- y
-
y方向の値
- 返却値
-
x,yがminと等しければtrue、それ以外の時はfalseを返す
561 562 563 |
# File 'lib/Miyako/API/struct_segment.rb', line 561 def min?(x, y) @x.min?(x) && @y.min?(y) end |
#move(dx, dy) ⇒ Object
位置を変更したインスタンスを返す(変化量を指定)
引数で指定したぶん移動させたときの位置を新しくインスタンスを生成して返す 自分自身の値は変わらない
- dx
-
移動量(x方向)。単位はピクセル
- dy
-
移動量(y方向)。単位はピクセル
- 返却値
-
自分自身の複製を更新したインスタンス
451 452 453 |
# File 'lib/Miyako/API/struct_segment.rb', line 451 def move(dx, dy) self.dup.move!(dx, dy) end |
#move!(dx, dy) ⇒ Object
位置を変更する(変化量を指定)
ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
- dx
-
移動量(x方向)。単位はピクセル
- dy
-
移動量(y方向)。単位はピクセル
- 返却値
-
自分自身を返す
428 429 430 431 432 |
# File 'lib/Miyako/API/struct_segment.rb', line 428 def move!(dx, dy) @x.move!(dx) @y.move!(dy) return self end |
#move_to(x, y) ⇒ Object
位置を変更したインスタンスを返す(位置指定)
引数で指定したぶん移動させたときの位置を新しくインスタンスを生成して返す 自分自身の値は変わらない
- x
-
移動先位置(x方向)。単位はピクセル
- y
-
移動先位置(y方向)。単位はピクセル
- 返却値
-
自分自身の複製を更新したインスタンス
461 462 463 |
# File 'lib/Miyako/API/struct_segment.rb', line 461 def move_to(x, y) self.dup.move_to!(x, y) end |
#move_to!(x, y) ⇒ Object
位置を変更する(位置指定)
ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
- x
-
移動先位置(x方向)。単位はピクセル
- y
-
移動先位置(y方向)。単位はピクセル
- 返却値
-
自分自身を返す
439 440 441 442 443 |
# File 'lib/Miyako/API/struct_segment.rb', line 439 def move_to!(x, y) @x.move_to!(x) @y.move_to!(y) return self end |
#reset!(min_x, max_x, min_y, max_y) ⇒ Object
線分情報を変更する
x,yそれぞれのminとmaxを一緒に更新する min>maxのときは、それぞれの値を入れ替える
- min_x
-
x方向の線分の最小値
- max_x
-
x方向の線分の最大値
- min_y
-
y方向の線分の最小値
- max_y
-
y方向の線分の最大値
- 返却値
-
自分自身
515 516 517 518 |
# File 'lib/Miyako/API/struct_segment.rb', line 515 def reset!(min_x, max_x, min_y, max_y) #:nodoc: @x.reset!(min_x, max_x) @y.reset!(min_y, max_y) end |
#resize(dw, dh) ⇒ Object
サイズを変更したインスタンスを返す(変化量を指定)
引数で指定したぶん変えたときの大きさを新しくインスタンスを生成して返す 自分自身の値は変わらない
- dw
-
幅変更。単位はピクセル
- dh
-
高さ変更。単位はピクセル
- 返却値
-
自分自身の複製を更新したインスタンス
493 494 495 |
# File 'lib/Miyako/API/struct_segment.rb', line 493 def resize(dw, dh) self.dup.resize!(dw,dh) end |
#resize!(dw, dh) ⇒ Object
サイズを変更する(変化量を指定)
ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
- dw
-
幅変更。単位はピクセル
- dh
-
高さ変更。単位はピクセル
- 返却値
-
自分自身を返す
470 471 472 473 474 |
# File 'lib/Miyako/API/struct_segment.rb', line 470 def resize!(dw, dh) @x.resize!(dw) @y.resize!(dh) return self end |
#resize_to(w, h) ⇒ Object
サイズを変更したインスタンスを返す
引数で指定したぶん変えたときの大きさを新しくインスタンスを生成して返す 自分自身の値は変わらない
- w
-
幅変更。単位はピクセル
- h
-
高さ変更。単位はピクセル
- 返却値
-
自分自身の複製を更新したインスタンス
503 504 505 |
# File 'lib/Miyako/API/struct_segment.rb', line 503 def resize_to(w, h) self.dup.resize_to!(w,h) end |
#resize_to!(w, h) ⇒ Object
サイズを変更する
ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
- w
-
幅変更。単位はピクセル
- h
-
高さ変更。単位はピクセル
- 返却値
-
自分自身を返す
481 482 483 484 485 |
# File 'lib/Miyako/API/struct_segment.rb', line 481 def resize_to!(w, h) @x.resize_to!(w) @y.resize_to!(h) return self end |
#to_ary ⇒ Object
線分情報を配列に変換する
[[min, max],[min, max]]の配列を生成して返す。
- 返却値
-
生成した配列
523 524 525 |
# File 'lib/Miyako/API/struct_segment.rb', line 523 def to_ary [@x.to_ary, @y.to_ary] end |