Class: Miyako::SegmentStruct
- Defined in:
- lib/Miyako/API/struct_segment.rb
Overview
線分の区間情報のための構造体クラス
位置変更メソッドを追加
Instance Method Summary collapse
-
#*(other) ⇒ Object
インスタンスのかけ算 もう一方が整数のとき、x,yにotherを掛けたものを返す Point構造体や配列など、[]メソッドがつかえるもののとき、x,y同士を掛けたものを返す それ以外の時は例外が発生する 自分自身の値は変わらない other:: 整数もしくはPoint構造体 返却値:: Point構造体.
-
#+(other) ⇒ Object
インスタンスの足し算 もう一方が整数のとき、x,yにotherを足したものを返す Point構造体や配列など、[]メソッドがつかえるもののとき、x,y同士を足したものを返す それ以外の時は例外が発生する 自分自身の値は変わらない other:: 整数もしくはPoint構造体 返却値:: Point構造体.
-
#-(other) ⇒ Object
インスタンスの引き算 もう一方が整数のとき、x,yからotherを引いたものを返す Point構造体や配列など、[]メソッドがつかえるもののとき、x,y同士を引いたものを返す それ以外の時は例外が発生する 自分自身の値は変わらない other:: 整数もしくはPoint構造体 返却値:: Point構造体.
-
#/(other) ⇒ Object
インスタンスの割り算 もう一方が整数のとき、x,yからotherを割ったものを返す Point構造体や配列など、[]メソッドがつかえるもののとき、x,y同士を割ったものを返す それ以外の時は例外が発生する 自分自身の値は変わらない other:: 整数もしくはPoint構造体 返却値:: Point構造体.
-
#between?(v) ⇒ Boolean
値が線分の範囲内かどうかを判別する 値がminとmaxの値の範囲内にあるかどうかを判別する。範囲内にあればtrueを返す 値がminもしくはmaxに等しいときもtrueを返す v:: 判別する値 返却値:: 範囲内のときはtrue、範囲外の時はfalseを返す.
-
#collision?(other) ⇒ Boolean
レシーバがotherの範囲と重なっているかどうかを求める 最小数・最大数のどちらかがotherの範囲内かどうかを確認する other:: 比較対象の線分 返却値:: 最小値・最大値のどちらかがotherの範囲内ならばtrueを返す.
-
#covers?(other) ⇒ Boolean
otherがレシーバの範囲内かどうかを求める 最小数・最大数ともにotherの範囲外かどうかを確認する other:: 比較対象の線分 返却値:: 最小値・最大値ともにotherの範囲外ならばtrueを返す.
-
#in_bounds?(big_segment, d, flag = false) ⇒ Boolean
小線分を移動させたとき、大線分が範囲内かどうかを判別する 移動後の小線分が大線分の範囲内にあるかどうかをtrue/falseで取得する big_segment:: 大線分の範囲。Segment構造体、もしくはで構成された配列 d:: selfの移動量 flag:: 大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse 返却値:: 範囲内のときはtrue、範囲外の時はfalseを返す.
-
#in_bounds_ex?(big_segment, d, flag = false) ⇒ Boolean
小線分を移動させたとき、大線分が範囲内かどうかを判別して、その状態によって値を整数で返す 移動後の小線分の範囲が大線分の範囲内のときは0、 マイナス方向で範囲外に出るときは-1、 プラス方向で出るときは1を返す big_segment:: 大線分の範囲。Segment構造体、もしくはで構成された配列 d:: selfの移動量 flag:: 大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse 返却値:: 判別の結果.
-
#in_bounds_rev?(big_segment, d, flag = false) ⇒ Boolean
移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す 移動後の小線分の範囲が大線分の範囲内のときは0、 マイナス方向で範囲外に出るときは1、 プラス方向で出るときは-1を返す big_segment:: 大線分の範囲。Segment構造体、もしくはで構成された配列 d:: selfの移動量 flag:: 大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse 返却値:: 判別の結果.
-
#in_bounds_rev_ex?(big_segment, d, flag = false) ⇒ Boolean
移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す 移動量が0のときは0、 移動後の小線分の範囲が大線分の範囲内のときは1、 範囲外に出るときは-1を返す big_segment:: 大線分の範囲。Segment構造体、もしくはで構成された配列 d:: selfの移動量 flag:: 大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse 返却値:: 判別の結果.
-
#in_edge?(v) ⇒ Boolean
値が線分の端かどうかを判別する 値がminもしくはmaxと等しければtrueを返す v:: 判別する値 返却値:: vがminもしくはmaxと等しければtrue、それ以外の時はfalseを返す.
-
#in_range?(v) ⇒ Boolean
値が線分の範囲内かどうかを判別する 値がminとmaxの値の範囲内にあるかどうかを判別する。範囲内にあればtrueを返す 値がminもしくはmaxに等しいときもtrueを返す v:: 判別する値 返却値:: 範囲内のときはtrue、範囲外の時はfalseを返す.
-
#max?(v) ⇒ Boolean
値が最大値かどうかを判別する 値がmaxと等しければtrueを返す v:: 判別する値 返却値:: vがmaxと等しければtrue、それ以外の時はfalseを返す.
-
#min?(v) ⇒ Boolean
値が最小値かどうかを判別する 値がminと等しければtrueを返す v:: 判別する値 返却値:: vがminと等しければtrue、それ以外の時はfalseを返す.
-
#move(d) ⇒ Object
位置を変更したインスタンスを返す(変化量を指定) 引数で指定したぶん移動させたときの位置を新しくインスタンスを生成して返す 自分自身の値は変わらない d:: 移動量 返却値:: 自分自身の複製を更新したインスタンス.
-
#move!(d) ⇒ Object
位置を変更する(変化量を指定) d:: 移動量 返却値:: 自分自身を返す.
-
#move_to(v) ⇒ Object
位置を変更したインスタンスを返す(位置指定) 引数で指定したぶん移動させたときの位置を新しくインスタンスを生成して返す 自分自身の値は変わらない v:: 移動先位置。単位はピクセル 返却値:: 自分自身の複製を更新したインスタンス.
-
#move_to!(v) ⇒ Object
位置を変更する(位置指定) v:: 移動先位置。単位はピクセル 返却値:: 自分自身を返す.
-
#reset!(min, max) ⇒ Object
線分情報を変更する minとmaxを一緒に更新する min>maxのときは、それぞれの値を入れ替える min:: 線分の最小値 max:: 線分の最大値 返却値:: 自分自身.
-
#resize(d) ⇒ Object
サイズを変更したインスタンスを返す(変化量を指定) 引数で指定したぶん変えたときの大きさを新しくインスタンスを生成して返す 自分自身の値は変わらない d:: 変更量。単位はピクセル 返却値:: 自分自身の複製を更新したインスタンス.
-
#resize!(d) ⇒ Object
幅を変更する(変化量を指定) d:: 変更量。単位はピクセル 返却値:: 自分自身を返す.
-
#resize_to(v) ⇒ Object
サイズを変更したインスタンスを返す 引数で指定したぶん変えたときの大きさを新しくインスタンスを生成して返す 自分自身の値は変わらない v:: 変更後の幅。単位はピクセル 返却値:: 自分自身の複製を更新したインスタンス.
-
#resize_to!(v) ⇒ Object
幅を変更する ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す v:: 変更後の幅。単位はピクセル 返却値:: 自分自身を返す.
-
#size ⇒ Object
線分の大きさを求める max - min + 1 の値を求めて返す 返却値:: 線分の大きさ.
-
#to_ary ⇒ Object
線分情報を配列に変換する [min, max]の配列を生成して返す。 返却値:: 生成した配列.
Instance Method Details
#*(other) ⇒ Object
インスタンスのかけ算
もう一方が整数のとき、x,yにotherを掛けたものを返す Point構造体や配列など、[]メソッドがつかえるもののとき、x,y同士を掛けたものを返す それ以外の時は例外が発生する 自分自身の値は変わらない
- other
-
整数もしくはPoint構造体
- 返却値
-
Point構造体
179 180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/Miyako/API/struct_segment.rb', line 179 def *(other) ret = self.dup if other.kind_of?(Numeric) ret[0] *= other ret[1] *= other elsif other.methods.include?(:[]) ret[0] *= other[0] ret[1] *= other[1] else raise MiyakoError, "this parameter cannot access!" end ret end |
#+(other) ⇒ Object
インスタンスの足し算
もう一方が整数のとき、x,yにotherを足したものを返す Point構造体や配列など、[]メソッドがつかえるもののとき、x,y同士を足したものを返す それ以外の時は例外が発生する 自分自身の値は変わらない
- other
-
整数もしくはPoint構造体
- 返却値
-
Point構造体
137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/Miyako/API/struct_segment.rb', line 137 def +(other) ret = self.dup if other.kind_of?(Numeric) ret[0] += other ret[1] += other elsif other.methods.include?(:[]) ret[0] += other[0] ret[1] += other[1] else raise MiyakoError, "this parameter cannot access!" end ret end |
#-(other) ⇒ Object
インスタンスの引き算
もう一方が整数のとき、x,yからotherを引いたものを返す Point構造体や配列など、[]メソッドがつかえるもののとき、x,y同士を引いたものを返す それ以外の時は例外が発生する 自分自身の値は変わらない
- other
-
整数もしくはPoint構造体
- 返却値
-
Point構造体
158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/Miyako/API/struct_segment.rb', line 158 def -(other) ret = self.dup if other.kind_of?(Numeric) ret[0] -= other ret[1] -= other elsif other.methods.include?(:[]) ret[0] -= other[0] ret[1] -= other[1] else raise MiyakoError, "this parameter cannot access!" end ret end |
#/(other) ⇒ Object
インスタンスの割り算
もう一方が整数のとき、x,yからotherを割ったものを返す Point構造体や配列など、[]メソッドがつかえるもののとき、x,y同士を割ったものを返す それ以外の時は例外が発生する 自分自身の値は変わらない
- other
-
整数もしくはPoint構造体
- 返却値
-
Point構造体
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
# File 'lib/Miyako/API/struct_segment.rb', line 200 def /(other) ret = self.dup if other.kind_of?(Numeric) raise MiyakoValueError, "0 div!" if other == 0 ret[0] /= other ret[1] /= other elsif other.methods.include?(:[]) raise MiyakoValueError, "0 div!" if (other[0] == 0 || other[1] == 0) ret[0] /= other[0] ret[1] /= other[1] else raise MiyakoError, "this parameter cannot access!" end ret end |
#between?(v) ⇒ Boolean
値が線分の範囲内かどうかを判別する
値がminとmaxの値の範囲内にあるかどうかを判別する。範囲内にあればtrueを返す 値がminもしくはmaxに等しいときもtrueを返す
- v
-
判別する値
- 返却値
-
範囲内のときはtrue、範囲外の時はfalseを返す
32 33 34 |
# File 'lib/Miyako/API/struct_segment.rb', line 32 def between?(other) return self[0] >= other[0] && self[1] <= other[1] end |
#collision?(other) ⇒ Boolean
レシーバがotherの範囲と重なっているかどうかを求める
最小数・最大数のどちらかがotherの範囲内かどうかを確認する
- other
-
比較対象の線分
- 返却値
-
最小値・最大値のどちらかがotherの範囲内ならばtrueを返す
48 49 50 |
# File 'lib/Miyako/API/struct_segment.rb', line 48 def collision?(other) return (self[0] >= other[0] && self[0] <= other[1]) || (self[1] >= other[0] && self[1] <= other[1]) end |
#covers?(other) ⇒ Boolean
otherがレシーバの範囲内かどうかを求める
最小数・最大数ともにotherの範囲外かどうかを確認する
- other
-
比較対象の線分
- 返却値
-
最小値・最大値ともにotherの範囲外ならばtrueを返す
40 41 42 |
# File 'lib/Miyako/API/struct_segment.rb', line 40 def covers?(other) return self[0] <= other[0] && self[1] >= other[1] end |
#in_bounds?(big_segment, d, flag = false) ⇒ Boolean
小線分を移動させたとき、大線分が範囲内かどうかを判別する
移動後の小線分が大線分の範囲内にあるかどうかをtrue/falseで取得する
- big_segment
-
大線分の範囲。Segment構造体、もしくはで構成された配列
- d
-
selfの移動量
- flag
-
大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse
- 返却値
-
範囲内のときはtrue、範囲外の時はfalseを返す
283 284 285 286 287 288 289 290 |
# File 'lib/Miyako/API/struct_segment.rb', line 283 def in_bounds?(big_segment, d, flag = false) nx = self[0] + d nx2 = self[1] + d nx, nx2 = nx2, nx if nx > nx2 return flag ? (nx >= big_segment[0] && nx2 <= big_segment[1]) : (nx > big_segment[0] && (nx2 - 1) < big_segment[1]) end |
#in_bounds_ex?(big_segment, d, flag = false) ⇒ Boolean
小線分を移動させたとき、大線分が範囲内かどうかを判別して、その状態によって値を整数で返す
移動後の小線分の範囲が大線分の範囲内のときは0、 マイナス方向で範囲外に出るときは-1、 プラス方向で出るときは1を返す
- big_segment
-
大線分の範囲。Segment構造体、もしくはで構成された配列
- d
-
selfの移動量
- flag
-
大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse
- 返却値
-
判別の結果
300 301 302 303 304 305 306 |
# File 'lib/Miyako/API/struct_segment.rb', line 300 def in_bounds_ex?(big_segment, d, flag = false) nx = self[0] + d nx2 = self[1] + d - 1 nx, nx2 = nx2, nx if nx > nx2 return -1 if (nx < big_segment[0]) || (flag && (nx == big_segment[0])) return (nx2 > big_segment[1]) || (flag && (nx2 == big_segment[1])) ? 1 : 0 end |
#in_bounds_rev?(big_segment, d, flag = false) ⇒ Boolean
移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す
移動後の小線分の範囲が大線分の範囲内のときは0、 マイナス方向で範囲外に出るときは1、 プラス方向で出るときは-1を返す
- big_segment
-
大線分の範囲。Segment構造体、もしくはで構成された配列
- d
-
selfの移動量
- flag
-
大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse
- 返却値
-
判別の結果
316 317 318 319 320 321 322 |
# File 'lib/Miyako/API/struct_segment.rb', line 316 def in_bounds_rev?(big_segment, d, flag = false) nx = self[0] + d nx2 = self[1] + d - 1 nx, nx2 = nx2, nx if nx > nx2 return 1 if (nx < big_segment[0]) || (flag && (nx == big_segment[0])) return (nx2 > big_segment[1]) || (flag && (nx2 == big_segment[1])) ? -1 : 0 end |
#in_bounds_rev_ex?(big_segment, d, flag = false) ⇒ Boolean
移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す
移動量が0のときは0、 移動後の小線分の範囲が大線分の範囲内のときは1、 範囲外に出るときは-1を返す
- big_segment
-
大線分の範囲。Segment構造体、もしくはで構成された配列
- d
-
selfの移動量
- flag
-
大線分の端いっぱいも範囲外に含めるときはtrueを設定する。デフォルトはfalse
- 返却値
-
判別の結果
332 333 334 335 336 337 338 339 340 |
# File 'lib/Miyako/API/struct_segment.rb', line 332 def in_bounds_rev_ex?(big_segment, d, flag = false) return 0 if d == 0 dir = (d <=> 0) nx = self[0] + d nx2 = self[1] + d - 1 nx, nx2 = nx2, nx if nx > nx2 return -dir if (nx < big_segment[0]) || (flag && (nx == big_segment[0])) return (nx2 > big_segment[1]) || (flag && (nx2 == big_segment[1])) ? -dir : dir end |
#in_edge?(v) ⇒ Boolean
値が線分の端かどうかを判別する
値がminもしくはmaxと等しければtrueを返す
- v
-
判別する値
- 返却値
-
vがminもしくはmaxと等しければtrue、それ以外の時はfalseを返す
257 258 259 |
# File 'lib/Miyako/API/struct_segment.rb', line 257 def in_edge?(v) v == self[0] || v == self[1] end |
#in_range?(v) ⇒ Boolean
値が線分の範囲内かどうかを判別する
値がminとmaxの値の範囲内にあるかどうかを判別する。範囲内にあればtrueを返す 値がminもしくはmaxに等しいときもtrueを返す
- v
-
判別する値
- 返却値
-
範囲内のときはtrue、範囲外の時はfalseを返す
240 241 242 |
# File 'lib/Miyako/API/struct_segment.rb', line 240 def in_range?(v) v >= self[0] && v <= self[1] end |
#max?(v) ⇒ Boolean
値が最大値かどうかを判別する
値がmaxと等しければtrueを返す
- v
-
判別する値
- 返却値
-
vがmaxと等しければtrue、それ以外の時はfalseを返す
273 274 275 |
# File 'lib/Miyako/API/struct_segment.rb', line 273 def max?(v) v == self[1] end |
#min?(v) ⇒ Boolean
値が最小値かどうかを判別する
値がminと等しければtrueを返す
- v
-
判別する値
- 返却値
-
vがminと等しければtrue、それ以外の時はfalseを返す
265 266 267 |
# File 'lib/Miyako/API/struct_segment.rb', line 265 def min?(v) v == self[0] end |
#move(d) ⇒ Object
位置を変更したインスタンスを返す(変化量を指定)
引数で指定したぶん移動させたときの位置を新しくインスタンスを生成して返す 自分自身の値は変わらない
- d
-
移動量
- 返却値
-
自分自身の複製を更新したインスタンス
82 83 84 |
# File 'lib/Miyako/API/struct_segment.rb', line 82 def move(d) return self.dup.move!(d) end |
#move!(d) ⇒ Object
位置を変更する(変化量を指定)
- d
-
移動量
- 返却値
-
自分自身を返す
62 63 64 65 66 |
# File 'lib/Miyako/API/struct_segment.rb', line 62 def move!(d) self[0] += d self[1] += d return self end |
#move_to(v) ⇒ Object
位置を変更したインスタンスを返す(位置指定)
引数で指定したぶん移動させたときの位置を新しくインスタンスを生成して返す 自分自身の値は変わらない
- v
-
移動先位置。単位はピクセル
- 返却値
-
自分自身の複製を更新したインスタンス
91 92 93 |
# File 'lib/Miyako/API/struct_segment.rb', line 91 def move_to(v) return self.dup.move_to!(v) end |
#move_to!(v) ⇒ Object
位置を変更する(位置指定)
- v
-
移動先位置。単位はピクセル
- 返却値
-
自分自身を返す
71 72 73 74 75 |
# File 'lib/Miyako/API/struct_segment.rb', line 71 def move_to!(v) self[1] = self[1] - self[0] + v self[0] = v return self end |
#reset!(min, max) ⇒ Object
線分情報を変更する
minとmaxを一緒に更新する min>maxのときは、それぞれの値を入れ替える
- min
-
線分の最小値
- max
-
線分の最大値
- 返却値
-
自分自身
222 223 224 225 226 |
# File 'lib/Miyako/API/struct_segment.rb', line 222 def reset!(min, max) #:nodoc: self[0], self[1] = min, max self[0], self[1] = self[1], self[0] if self[0] > self[1] self end |
#resize(d) ⇒ Object
サイズを変更したインスタンスを返す(変化量を指定)
引数で指定したぶん変えたときの大きさを新しくインスタンスを生成して返す 自分自身の値は変わらない
- d
-
変更量。単位はピクセル
- 返却値
-
自分自身の複製を更新したインスタンス
117 118 119 |
# File 'lib/Miyako/API/struct_segment.rb', line 117 def resize(d) self.dup.resize!(d) end |
#resize!(d) ⇒ Object
幅を変更する(変化量を指定)
- d
-
変更量。単位はピクセル
- 返却値
-
自分自身を返す
98 99 100 101 |
# File 'lib/Miyako/API/struct_segment.rb', line 98 def resize!(d) self[1] += d return self end |
#resize_to(v) ⇒ Object
サイズを変更したインスタンスを返す
引数で指定したぶん変えたときの大きさを新しくインスタンスを生成して返す 自分自身の値は変わらない
- v
-
変更後の幅。単位はピクセル
- 返却値
-
自分自身の複製を更新したインスタンス
126 127 128 |
# File 'lib/Miyako/API/struct_segment.rb', line 126 def resize_to(v) self.dup.resize_to!(v) end |
#resize_to!(v) ⇒ Object
幅を変更する
ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
- v
-
変更後の幅。単位はピクセル
- 返却値
-
自分自身を返す
107 108 109 110 |
# File 'lib/Miyako/API/struct_segment.rb', line 107 def resize_to!(v) self[1] = self[0] + v - 1 return self end |
#size ⇒ Object
線分の大きさを求める
max - min + 1 の値を求めて返す
- 返却値
-
線分の大きさ
55 56 57 |
# File 'lib/Miyako/API/struct_segment.rb', line 55 def size self[1] - self[0] + 1 end |
#to_ary ⇒ Object
線分情報を配列に変換する
[min, max]の配列を生成して返す。
- 返却値
-
生成した配列
231 232 233 |
# File 'lib/Miyako/API/struct_segment.rb', line 231 def to_ary [self[0], self[1]] end |