sgl 0.4.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +254 -234
- data/History.txt +6 -0
- data/Manifest.txt +10 -0
- data/Rakefile +27 -7
- data/examples/cocoa1-basic.rb +14 -14
- data/examples/cocoa10-transparent.rb +26 -26
- data/examples/cocoa11-application.rb +13 -13
- data/examples/cocoa2-draw.rb +23 -23
- data/examples/cocoa3-affine.rb +29 -29
- data/examples/cocoa4-font.rb +24 -24
- data/examples/cocoa5-image.rb +22 -22
- data/examples/cocoa6-sound.rb +24 -24
- data/examples/cocoa7-movie.rb +40 -40
- data/examples/cocoa8-movieoverlay.rb +42 -42
- data/examples/cocoa9-streaming.rb +40 -40
- data/examples/opengl1-basic.rb +14 -14
- data/examples/opengl11-application.rb +13 -13
- data/examples/opengl2-draw.rb +23 -23
- data/examples/opengl3-affine.rb +29 -29
- data/examples/sample1.rb +11 -11
- data/examples/sample10.rb +16 -16
- data/examples/sample11.rb +22 -22
- data/examples/sample11a.rb +33 -33
- data/examples/sample12.rb +30 -30
- data/examples/sample12a.rb +35 -35
- data/examples/sample13.rb +116 -116
- data/examples/sample15.rb +24 -24
- data/examples/sample16.rb +31 -31
- data/examples/sample16a.rb +35 -35
- data/examples/sample6.rb +18 -18
- data/examples/sample7.rb +16 -16
- data/examples/sample9.rb +20 -20
- data/examples/testgl.rb +169 -169
- data/lib/sgl/bass.rb +46 -46
- data/lib/sgl/cocoa-app.rb +43 -43
- data/lib/sgl/cocoa-color.rb +65 -65
- data/lib/sgl/cocoa-draw.rb +72 -72
- data/lib/sgl/cocoa-event.rb +229 -229
- data/lib/sgl/cocoa-media.rb +144 -144
- data/lib/sgl/cocoa-notuse.rb +493 -493
- data/lib/sgl/cocoa-window.rb +203 -203
- data/lib/sgl/cocoa.rb +8 -8
- data/lib/sgl/opengl-app.rb +38 -38
- data/lib/sgl/opengl-color.rb +44 -44
- data/lib/sgl/opengl-draw.rb +260 -260
- data/lib/sgl/opengl-event.rb +325 -325
- data/lib/sgl/opengl-modules.rb +22 -22
- data/lib/sgl/opengl-window.rb +224 -224
- data/lib/sgl/opengl.rb +7 -7
- data/lib/sgl/sgl-button.rb +135 -135
- data/lib/sgl/sgl-client.rb +21 -21
- data/lib/sgl/sgl-color.rb +68 -82
- data/lib/sgl/sgl-connect.rb +9 -9
- data/lib/sgl/sgl-server.rb +58 -58
- data/lib/sgl/sgl-spring.rb +216 -216
- data/lib/sgl/version.rb +2 -2
- data/scripts/lib-txt2html.rb +130 -0
- data/scripts/txt2html +2 -63
- data/spec/sgl_spec.rb +13 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +1 -0
- data/test/test_cocoa_app.rb +291 -291
- data/test/test_module_ruby16.rb +30 -30
- data/test/test_opengl_app.rb +147 -147
- data/test/test_opengl_basic.rb +22 -22
- data/test/test_opengl_fullscreen.rb +23 -23
- data/test/test_opengl_novice.rb +35 -35
- data/website/challenge1.html +91 -91
- data/website/challenge1.txt +3 -3
- data/website/challenge2.html +143 -144
- data/website/challenge2.txt +13 -14
- data/website/challenge3.html +66 -63
- data/website/challenge3.txt +7 -7
- data/website/cocoa.html +85 -88
- data/website/cocoa.txt +2 -4
- data/website/description.html +138 -138
- data/website/description.txt +1 -1
- data/website/exercise1.html +262 -264
- data/website/exercise1.txt +58 -53
- data/website/exercise2.html +241 -683
- data/website/exercise2.txt +11 -427
- data/website/exercise3.html +206 -0
- data/website/exercise3.txt +155 -0
- data/website/exercise4.html +198 -0
- data/website/exercise4.txt +151 -0
- data/website/exercise5.html +162 -0
- data/website/exercise5.txt +113 -0
- data/website/exhibition.html +84 -84
- data/website/howto.html +146 -134
- data/website/howto.txt +9 -0
- data/website/index.html +178 -178
- data/website/index.txt +20 -19
- data/website/sound.html +141 -141
- metadata +16 -3
data/website/exercise1.txt
CHANGED
@@ -1,16 +1,9 @@
|
|
1
|
-
h1. 練習問題
|
1
|
+
h1. 練習問題1
|
2
2
|
|
3
|
-
h2. 課題1
|
4
|
-
|
5
|
-
h3. 課題1A 一本の線を描くプログラムを作る
|
6
|
-
|
7
|
-
h3. 課題1B ある考えの元に3本の線を描くプログラムを作る
|
8
|
-
|
9
|
-
h3. 課題1C 5本以下の直線で「変化」を表現するプログラムを作る
|
10
|
-
|
11
|
-
h3. 課題1D 10本以下の直線で「ハーモニー(調和)」を表現するプログラムを作る
|
3
|
+
h2. 課題1: 一本の線を描く
|
12
4
|
|
13
5
|
<pre syntax="ruby">
|
6
|
+
# kadai1.rb
|
14
7
|
require 'sgl' # プログラムの最初に必ず書く必要がある
|
15
8
|
window 100, 100 # windowを開く
|
16
9
|
background 0 # 背景を黒にする
|
@@ -19,22 +12,38 @@ line 0, 0, 100, 100 # 左下から右上に線を描く
|
|
19
12
|
wait # そのまま待つ
|
20
13
|
</pre>
|
21
14
|
|
22
|
-
|
15
|
+
h2. 課題2: ある考えの元に3本の線を描く
|
23
16
|
|
24
17
|
<pre syntax="ruby">
|
18
|
+
# kadai2.rb
|
25
19
|
require 'sgl'
|
26
|
-
window 100,100
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
20
|
+
window 100, 100
|
21
|
+
background 0
|
22
|
+
color 100
|
23
|
+
line 0, 0, 100, 100
|
24
|
+
line 0, 0, 100, 50
|
25
|
+
line 0, 0, 100, 25
|
31
26
|
wait
|
32
27
|
</pre>
|
33
28
|
|
34
|
-
h2. 課題
|
29
|
+
h2. 課題3: 5本以下の直線で「変化」を表現する
|
30
|
+
|
31
|
+
<pre syntax="ruby">
|
32
|
+
# kadai3.rb
|
33
|
+
# 考えてみましょう.
|
34
|
+
</pre>
|
35
|
+
|
36
|
+
h2. 課題4: 10本以下の直線で「ハーモニー(調和)」を表現する
|
37
|
+
|
38
|
+
<pre syntax="ruby">
|
39
|
+
# kadai4.rb
|
40
|
+
# 考えてみましょう.
|
41
|
+
</pre>
|
42
|
+
|
43
|
+
h2. 課題5: 一つの変数を使って2本の直線の構成をコントロールする
|
35
44
|
|
36
|
-
一つの変数を使って2本の直線の構成をコントロールするプログラムを作る.
|
37
45
|
<pre syntax="ruby">
|
46
|
+
# kadai5.rb
|
38
47
|
require 'sgl'
|
39
48
|
window 100, 100
|
40
49
|
a = 50
|
@@ -43,10 +52,10 @@ line 100, 0, 50, a
|
|
43
52
|
wait
|
44
53
|
</pre>
|
45
54
|
|
46
|
-
h2. 課題
|
55
|
+
h2. 課題6: 繰り返しを使った形態を描く
|
47
56
|
|
48
|
-
繰り返しを使った形態を描く.
|
49
57
|
<pre syntax="ruby">
|
58
|
+
# kadai6.rb
|
50
59
|
require 'sgl'
|
51
60
|
window 100, 100
|
52
61
|
for a in 20..80
|
@@ -56,10 +65,10 @@ end
|
|
56
65
|
wait
|
57
66
|
</pre>
|
58
67
|
|
59
|
-
h2. 課題
|
68
|
+
h2. 課題7: 計算を使った形態を描く
|
60
69
|
|
61
|
-
計算を使った形態をかくプログラムを作る.
|
62
70
|
<pre syntax="ruby">
|
71
|
+
# kadai7.rb
|
63
72
|
require 'sgl'
|
64
73
|
window 100, 100
|
65
74
|
for a in 20..40
|
@@ -69,11 +78,23 @@ end
|
|
69
78
|
wait
|
70
79
|
</pre>
|
71
80
|
|
72
|
-
h2. 課題
|
81
|
+
h2. 課題8: 半透明を使った形態を描く
|
73
82
|
|
74
|
-
h3. 入れ子構造 6A 格子状にひろがる形態を作る.
|
75
83
|
<pre syntax="ruby">
|
76
|
-
#
|
84
|
+
# kadai8.rb
|
85
|
+
require 'sgl'
|
86
|
+
window 100,100
|
87
|
+
color 100, 0, 0 # 赤
|
88
|
+
rect 10,10,70,70 # 四角
|
89
|
+
color 0,0,100,50 # 半透明の青
|
90
|
+
rect 30,30,90,90 # 四角を重ねてかく
|
91
|
+
wait
|
92
|
+
</pre>
|
93
|
+
|
94
|
+
h2. 課題9: 入れ子構造,格子状にひろがる形態を作る
|
95
|
+
|
96
|
+
<pre syntax="ruby">
|
97
|
+
# kadai9.rb
|
77
98
|
require 'sgl'
|
78
99
|
window 200,200
|
79
100
|
for a in 0..10
|
@@ -85,11 +106,10 @@ end
|
|
85
106
|
wait
|
86
107
|
</pre>
|
87
108
|
|
88
|
-
h2. 課題
|
109
|
+
h2. 課題10: 条件分岐,画面の左右で違う形態を描く
|
89
110
|
|
90
|
-
h3. 質問 (if 50 < a; end) 7A 画面の左右で違う形態を描く.
|
91
111
|
<pre syntax="ruby">
|
92
|
-
#
|
112
|
+
# kadai10.rb
|
93
113
|
require 'sgl'
|
94
114
|
window 200,200
|
95
115
|
for a in 0..200
|
@@ -103,12 +123,10 @@ end
|
|
103
123
|
wait
|
104
124
|
</pre>
|
105
125
|
|
106
|
-
h2. 課題
|
126
|
+
h2. 課題11: 自分なりの命令を作り,それを用いた形態を描く
|
107
127
|
|
108
|
-
h3. defを使って自分なりのコマンドを作り,それを用いた形態を描く.
|
109
|
-
|
110
|
-
ファイル名 kadai8a.rb
|
111
128
|
<pre syntax="ruby">
|
129
|
+
# kadai11.rb
|
112
130
|
require 'sgl'
|
113
131
|
window 100,100
|
114
132
|
background 100
|
@@ -128,16 +146,14 @@ my_rect(60, 60, 80, 90, 70, 90)
|
|
128
146
|
wait
|
129
147
|
</pre>
|
130
148
|
|
131
|
-
def
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
h2. 課題9A
|
149
|
+
defというコマンドで命令を定義する.ここでは,枠付きの塗りつぶされた四
|
150
|
+
角形を定義している.defの後に続くのが命令の名前となる.アルファベット
|
151
|
+
の小文字から始まっている必要がある.
|
136
152
|
|
137
|
-
|
153
|
+
h2. 課題12: flipを使ってアニメーションを作る
|
138
154
|
|
139
|
-
ファイル名 kadai9a.rb
|
140
155
|
<pre syntax="ruby">
|
156
|
+
# kadai12.rb
|
141
157
|
require 'sgl'
|
142
158
|
window 100,100
|
143
159
|
loop do
|
@@ -149,17 +165,15 @@ end
|
|
149
165
|
wait
|
150
166
|
</pre>
|
151
167
|
|
152
|
-
flip
|
168
|
+
flipというところで,ちょうど紙をめくるように次の画面を表示させている.
|
153
169
|
@loop do 〜〜〜 end@ で,その間を無限に繰り返す.
|
154
170
|
|
155
|
-
h2. 課題
|
156
|
-
|
157
|
-
h3. HSVによる色指定を使って,自分なりの色グラデーションを作る。
|
171
|
+
h2. 課題13: HSVによる色指定を使り,自分なりの色グラデーションを作る
|
158
172
|
|
159
173
|
静止画でもアニメーションでもよい.(colorHSV, backgroundHSV)
|
160
174
|
|
161
|
-
ファイル名 kadai10a.rb
|
162
175
|
<pre syntax="ruby">
|
176
|
+
# kadai13.rb
|
163
177
|
require 'sgl'
|
164
178
|
window 100,100
|
165
179
|
background 100
|
@@ -181,12 +195,3 @@ wait
|
|
181
195
|
|
182
196
|
* 4番目のパラメーターを使って,透明度を設定することもできる.
|
183
197
|
* backgroundHSVというコマンドもある.
|
184
|
-
|
185
|
-
h2. 課題の注意点
|
186
|
-
|
187
|
-
課題はいずれもwindowサイズなどは自由.課題例は100,100のサイズになって
|
188
|
-
いるが,より大きいwindowサイズを選択してもよい。
|
189
|
-
|
190
|
-
ファイル名は必ず指定のものにし,Z:に保存する.指定のファイル名のファイ
|
191
|
-
ルが保存されているかどうかで課題提出を判定する.ファイル名が違う場合は
|
192
|
-
提出してないことになってしまうので,注意する.
|
data/website/exercise2.html
CHANGED
@@ -1,683 +1,241 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
-
<head>
|
5
|
-
<link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
|
6
|
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
7
|
-
<title>
|
8
|
-
練習問題
|
9
|
-
</title>
|
10
|
-
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
11
|
-
<style>
|
12
|
-
|
13
|
-
</style>
|
14
|
-
<script type="text/javascript">
|
15
|
-
window.onload = function() {
|
16
|
-
settings = {
|
17
|
-
tl: { radius: 10 },
|
18
|
-
tr: { radius: 10 },
|
19
|
-
bl: { radius: 10 },
|
20
|
-
br: { radius: 10 },
|
21
|
-
antiAlias: true,
|
22
|
-
autoPad: true,
|
23
|
-
validTags: ["div"]
|
24
|
-
}
|
25
|
-
var versionBox = new curvyCorners(settings, document.getElementById("version"));
|
26
|
-
versionBox.applyCornersToAll();
|
27
|
-
}
|
28
|
-
</script>
|
29
|
-
</head>
|
30
|
-
<body>
|
31
|
-
<div id="main">
|
32
|
-
|
33
|
-
<h1>練習問題
|
34
|
-
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/sgl"; return false'>
|
35
|
-
<p>Get Version</p>
|
36
|
-
<a href="http://rubyforge.org/projects/sgl" class="numbers">0.
|
37
|
-
</div>
|
38
|
-
<h2>課題
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
vertex 60, 90
|
96
|
-
|
97
|
-
vertex -
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
<pre syntax="ruby">
|
109
|
-
beginObj(POLYGON)
|
110
|
-
color 100, 0, 0,
|
111
|
-
vertex 60, 90
|
112
|
-
color 0, 100, 0, 100
|
113
|
-
vertex -120, 60
|
114
|
-
color 0, 0, 100, 100
|
115
|
-
vertex -90, -90
|
116
|
-
color 100, 100, 0,
|
117
|
-
vertex 120, -90
|
118
|
-
endObj
|
119
|
-
</pre>
|
120
|
-
|
121
|
-
<p
|
122
|
-
|
123
|
-
|
124
|
-
<
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
でしか使うことができなかった.しかし,$のついた変数であれば,プログラ
|
243
|
-
ムが動いている間ずっと残る.プログラムの最初の部分で,<code>$x = 0</code>のように
|
244
|
-
して,あらかじめなんらかの値を代入することで,変数を使うということを示
|
245
|
-
す必要がある.</p>
|
246
|
-
|
247
|
-
|
248
|
-
<h2>課題16A 円</h2>
|
249
|
-
|
250
|
-
|
251
|
-
<pre syntax="ruby">
|
252
|
-
require 'sgl'
|
253
|
-
|
254
|
-
def setup
|
255
|
-
window -200, -200, 200, 200
|
256
|
-
background 100
|
257
|
-
$x = 0
|
258
|
-
$y = 0
|
259
|
-
end
|
260
|
-
|
261
|
-
def onMouseDown(x, y)
|
262
|
-
$x = x
|
263
|
-
$y = y
|
264
|
-
end
|
265
|
-
|
266
|
-
def display
|
267
|
-
color 100, 0, 0
|
268
|
-
circle($x, $y, 100)
|
269
|
-
end
|
270
|
-
|
271
|
-
mainloop
|
272
|
-
</pre>
|
273
|
-
|
274
|
-
<p>円を描く.マウスボタンを押すと,ボタンを押したところに移動する.
|
275
|
-
プログラムの構造は課題15Aで導入された構造を使っている.</p>
|
276
|
-
|
277
|
-
|
278
|
-
<pre syntax="ruby">
|
279
|
-
def display
|
280
|
-
colorHSV 66, 100, 100, 30
|
281
|
-
circle($x, $y, 100, POLYGON)
|
282
|
-
end
|
283
|
-
</pre>
|
284
|
-
|
285
|
-
<p>塗り潰された円を描く.</p>
|
286
|
-
|
287
|
-
|
288
|
-
<pre syntax="ruby">
|
289
|
-
def display
|
290
|
-
colorHSV 33, 100, 100, 30
|
291
|
-
circle($x, $y, 100, POLYGON, 5)
|
292
|
-
end
|
293
|
-
</pre>
|
294
|
-
|
295
|
-
<p>五角形を描く.いままで円といってきたものは,実は正確には正32角形である.
|
296
|
-
上記circle文の<code>5</code>のところを<code>32</code>にすると,普通の円と同じになる.</p>
|
297
|
-
|
298
|
-
|
299
|
-
<pre syntax="ruby">
|
300
|
-
def display
|
301
|
-
x = mouseX
|
302
|
-
y = mouseY
|
303
|
-
colorHSV 8, 100, 100, 50
|
304
|
-
circle(x, y, 100, POLYGON, 7)
|
305
|
-
end
|
306
|
-
</pre>
|
307
|
-
|
308
|
-
<p>マウスを押されないでもついてくるようにする.</p>
|
309
|
-
|
310
|
-
|
311
|
-
<h2>課題18A 3D</h2>
|
312
|
-
|
313
|
-
|
314
|
-
<pre syntax="ruby">
|
315
|
-
require 'sgl'
|
316
|
-
|
317
|
-
window -200, -200, 200, 200
|
318
|
-
|
319
|
-
push
|
320
|
-
color 100, 0, 0
|
321
|
-
translate 30, 40, 20
|
322
|
-
rotateZ 10
|
323
|
-
rotateY 20
|
324
|
-
rotateX 30
|
325
|
-
scale 20
|
326
|
-
rect -5, -5, 5, 5
|
327
|
-
pop
|
328
|
-
|
329
|
-
wait
|
330
|
-
</pre>
|
331
|
-
|
332
|
-
<p>課題14の物体の移動の例とほとんど同じだが,<code>translate 30, 40, 20</code>として
|
333
|
-
三つの値を指定している点,<code>rotateZ</code>だけではなく,<code>rotateY</code> <code>rotateX</code>を
|
334
|
-
使っている点が違う.三つめの値はZ軸,奥行きである.手前が正の値,奥の
|
335
|
-
ほうが負の値となる.vertexを使った形の描画は,三つの値を指定することで
|
336
|
-
3Dに対応できる.</p>
|
337
|
-
|
338
|
-
|
339
|
-
<pre syntax="ruby">
|
340
|
-
require 'sgl'
|
341
|
-
|
342
|
-
def setup
|
343
|
-
window -200, -200, 200, 200
|
344
|
-
background 100
|
345
|
-
end
|
346
|
-
|
347
|
-
def display
|
348
|
-
x = mouseX
|
349
|
-
y = mouseY
|
350
|
-
|
351
|
-
push
|
352
|
-
color 100, 0, 0
|
353
|
-
translate x, y, 0
|
354
|
-
rotateX x
|
355
|
-
rotateY y
|
356
|
-
scale 20
|
357
|
-
rect -5, -5, 5, 5
|
358
|
-
pop
|
359
|
-
end
|
360
|
-
|
361
|
-
mainloop
|
362
|
-
</pre>
|
363
|
-
|
364
|
-
<p>マウスの移動と組み合わせることもできる.</p>
|
365
|
-
|
366
|
-
|
367
|
-
<pre syntax="ruby">
|
368
|
-
require 'sgl'
|
369
|
-
|
370
|
-
def setup
|
371
|
-
window -200, -200, 200, 200
|
372
|
-
background 100
|
373
|
-
$pos = [] # 中身が空の配列を用意する.
|
374
|
-
end
|
375
|
-
|
376
|
-
def display
|
377
|
-
x = mouseX
|
378
|
-
y = mouseY
|
379
|
-
|
380
|
-
$pos << [x, y] # 配列に現在のマウスの位置を追加する.
|
381
|
-
|
382
|
-
$pos.each {|pos| # 配列の各々の要素について,{}の中身を実行する.
|
383
|
-
# その各々の要素は,posという変数に入る.
|
384
|
-
x = pos[0]
|
385
|
-
y = pos[1]
|
386
|
-
|
387
|
-
push
|
388
|
-
colorHSV 0, 100, 100, 10
|
389
|
-
translate x, y, 0
|
390
|
-
rotateX x
|
391
|
-
rotateY y
|
392
|
-
scale 20
|
393
|
-
rect -5, -5, 5, 5
|
394
|
-
pop
|
395
|
-
}
|
396
|
-
|
397
|
-
if 10 < $pos.length # 配列がたまりすぎた場合は,先頭から順に捨てていく.
|
398
|
-
$pos.shift
|
399
|
-
end
|
400
|
-
end
|
401
|
-
|
402
|
-
mainloop
|
403
|
-
</pre>
|
404
|
-
|
405
|
-
<p>配列の使用と組み合わせてみている.</p>
|
406
|
-
|
407
|
-
|
408
|
-
<h2>課題19A 速度</h2>
|
409
|
-
|
410
|
-
|
411
|
-
<pre syntax="ruby">
|
412
|
-
require 'sgl'
|
413
|
-
|
414
|
-
def setup
|
415
|
-
window -200, -200, 200, 200
|
416
|
-
background 100
|
417
|
-
$x = 0
|
418
|
-
$y = 0
|
419
|
-
end
|
420
|
-
|
421
|
-
def display
|
422
|
-
x = mouseX
|
423
|
-
y = mouseY
|
424
|
-
speed = 20.0
|
425
|
-
vx = (x - $x)/speed
|
426
|
-
vy = (y - $y)/speed
|
427
|
-
$x = $x + vx
|
428
|
-
$y = $y + vy
|
429
|
-
color 100, 0, 0
|
430
|
-
circle($x, $y, 50, POLYGON)
|
431
|
-
end
|
432
|
-
|
433
|
-
mainloop
|
434
|
-
</pre>
|
435
|
-
|
436
|
-
<p>物の位置に加え,速度を導入する.円がマウスのところに近付こうとする.</p>
|
437
|
-
|
438
|
-
|
439
|
-
<pre syntax="ruby">
|
440
|
-
require 'sgl'
|
441
|
-
|
442
|
-
def setup
|
443
|
-
window -200, -200, 200, 200
|
444
|
-
background 100
|
445
|
-
$pos=[]
|
446
|
-
for i in 0..9
|
447
|
-
$pos[i] = [-200 + i * 40, 0] # 最初の位置を指定する.
|
448
|
-
end
|
449
|
-
end
|
450
|
-
|
451
|
-
def display
|
452
|
-
x = mouseX
|
453
|
-
y = mouseY
|
454
|
-
|
455
|
-
speed = 10.0
|
456
|
-
for i in 0..9
|
457
|
-
pos = $pos[i]
|
458
|
-
vx = (x - pos[0]) / speed # マウスに吸い寄せられる速度
|
459
|
-
vy = (y - pos[1]) / speed
|
460
|
-
speed += 2.0 # 円によって速度が異なるようにする.
|
461
|
-
pos[0] = pos[0] + vx # マウスに吸い寄せられた位置
|
462
|
-
pos[1] = pos[1] + vy
|
463
|
-
color 100, 0, 0, 10
|
464
|
-
circle(pos[0], pos[1], 50, POLYGON)
|
465
|
-
end
|
466
|
-
end
|
467
|
-
|
468
|
-
mainloop
|
469
|
-
</pre>
|
470
|
-
|
471
|
-
<p>配列の使い方を説明する.</p>
|
472
|
-
|
473
|
-
|
474
|
-
<pre syntax="ruby">
|
475
|
-
require 'sgl'
|
476
|
-
|
477
|
-
def setup
|
478
|
-
window -200, -200, 200, 200
|
479
|
-
background 100
|
480
|
-
|
481
|
-
$pos=[]
|
482
|
-
$orgpos=[]
|
483
|
-
for i in 0..19
|
484
|
-
$pos[i] = [-200 + i * 40, 0] # 最初の位置を指定する.
|
485
|
-
$orgpos[i] = [-200 + i * 40, 0] # もう一つ別の配列にも保存する.
|
486
|
-
end
|
487
|
-
end
|
488
|
-
|
489
|
-
def display
|
490
|
-
x = mouseX
|
491
|
-
y = mouseY
|
492
|
-
|
493
|
-
for i in 0..19
|
494
|
-
pos = $pos[i] # 現在の円の位置
|
495
|
-
orgpos = $orgpos[i] # 元々の位置
|
496
|
-
|
497
|
-
if mouseDown # ボタンが押されているときだけマウスに吸いつく.
|
498
|
-
vx = x - pos[0]
|
499
|
-
vy = y - pos[1]
|
500
|
-
mag = Math.sqrt(vx * vx + vy * vy)
|
501
|
-
mag = mag / 40
|
502
|
-
mag = mag * mag + 1
|
503
|
-
vx = vx / mag
|
504
|
-
vy = vy / mag
|
505
|
-
pos[0] = pos[0] + vx
|
506
|
-
pos[1] = pos[1] + vy
|
507
|
-
end
|
508
|
-
|
509
|
-
speed = 3.0
|
510
|
-
vx2 = (orgpos[0] - pos[0]) / speed # 元々の位置に吸い寄せられる速度
|
511
|
-
vy2 = (orgpos[1] - pos[1]) / speed
|
512
|
-
pos[0] = pos[0] + vx2 # マウスに吸い寄せられた位置
|
513
|
-
pos[1] = pos[1] + vy2
|
514
|
-
color 100, 0, 0, 30
|
515
|
-
circle(pos[0], pos[1], 50, POLYGON)
|
516
|
-
end
|
517
|
-
end
|
518
|
-
|
519
|
-
mainloop
|
520
|
-
</pre>
|
521
|
-
|
522
|
-
<p>マウスにすいよせられる円.マウスボタンを押しているときだけ反応する.</p>
|
523
|
-
|
524
|
-
|
525
|
-
<pre syntax="ruby">
|
526
|
-
require 'sgl'
|
527
|
-
|
528
|
-
def setup
|
529
|
-
window -200, -200, 200, 200
|
530
|
-
background 100
|
531
|
-
$xpos = [] # 配列を準備する.
|
532
|
-
$ypos = []
|
533
|
-
for i in 0..9
|
534
|
-
$xpos[i] = -200 + i * 40
|
535
|
-
$ypos[i] = 0
|
536
|
-
end
|
537
|
-
end
|
538
|
-
|
539
|
-
def display
|
540
|
-
x = mouseX
|
541
|
-
y = mouseY
|
542
|
-
|
543
|
-
speed = 10.0
|
544
|
-
for i in 0..9
|
545
|
-
vx = (x - $xpos[i]) / speed # マウスに吸い寄せられる速度
|
546
|
-
vy = (y - $ypos[i]) / speed
|
547
|
-
speed += 2.0 # 円によって速度が異なるようにする.
|
548
|
-
$xpos[i] = $xpos[i] + vx # マウスに吸い寄せられた位置
|
549
|
-
$ypos[i] = $ypos[i] + vy
|
550
|
-
color 100, 0, 0, 10
|
551
|
-
circle($xpos[i], $ypos[i], 50, POLYGON)
|
552
|
-
end
|
553
|
-
end
|
554
|
-
|
555
|
-
mainloop
|
556
|
-
</pre>
|
557
|
-
|
558
|
-
<p>配列の使い方を変更した.</p>
|
559
|
-
|
560
|
-
|
561
|
-
<h2>課題20A キーボードからの入力の仕方</h2>
|
562
|
-
|
563
|
-
|
564
|
-
<pre syntax="ruby">
|
565
|
-
require 'sgl'
|
566
|
-
|
567
|
-
def setup
|
568
|
-
window 200, 200
|
569
|
-
background 100
|
570
|
-
$key = 0
|
571
|
-
end
|
572
|
-
|
573
|
-
def onKeyDown(key)
|
574
|
-
p key
|
575
|
-
$key = key
|
576
|
-
end
|
577
|
-
|
578
|
-
def display
|
579
|
-
colorHSV $key, 100, 100
|
580
|
-
line $key, 0, $key, 200
|
581
|
-
end
|
582
|
-
|
583
|
-
mainloop
|
584
|
-
</pre>
|
585
|
-
|
586
|
-
<p>アルファベットのキーを押すと,keyに1〜26の値が入る.Aが1,Zが26という
|
587
|
-
関係になる.</p>
|
588
|
-
|
589
|
-
|
590
|
-
<p>それら以外のキーを押したときにどのようなキーコードになるかは,
|
591
|
-
<code>c:\ruby\doc\rubysdl\rubysdl_const_list.txt</code> に記述されている.
|
592
|
-
数字の0が押されたときは,<code>SDL::Key::K0</code>という値となる.</p>
|
593
|
-
|
594
|
-
|
595
|
-
<h2>課題21A 配列の使い方return</h2>
|
596
|
-
|
597
|
-
|
598
|
-
<pre syntax="ruby">
|
599
|
-
require 'sgl'
|
600
|
-
|
601
|
-
def setup
|
602
|
-
window -200, -200, 200, 200
|
603
|
-
background 100
|
604
|
-
$pos = [] # 中身が空の配列を用意する.
|
605
|
-
for a in 0..10 # 配列の要素それぞれについて繰り返す.
|
606
|
-
$pos[a] = 0 # 中身に全部0を入れておく.
|
607
|
-
end
|
608
|
-
$index = 0 # 現在配列のどこの部分を指しているかを示す変数である.
|
609
|
-
end
|
610
|
-
|
611
|
-
def display
|
612
|
-
$pos[$index] = mouseX # 配列の$indexの示す個所に現在のマウスのx座標を入れる.
|
613
|
-
|
614
|
-
for a in 0..10 # 配列の要素それぞれについて繰り返します.
|
615
|
-
x = $pos[a]
|
616
|
-
color 0
|
617
|
-
line x, -100, x, 100 # 縦線を描く.
|
618
|
-
end
|
619
|
-
|
620
|
-
$index = $index + 1 # 現在を示す$indexを次の値のところにセットする.
|
621
|
-
if 10 < $index # $indexが配列の大きさを越えたら0にセットしなおす.
|
622
|
-
$index = 0
|
623
|
-
end
|
624
|
-
|
625
|
-
p $pos # $posという配列の中身を表示する.
|
626
|
-
end
|
627
|
-
|
628
|
-
mainloop
|
629
|
-
</pre>
|
630
|
-
|
631
|
-
<p>配列の使い方の基本形である.縦線が,マウスの動きを追って動く.つまりマ
|
632
|
-
ウスのx座標だけを保存している.x座標,y座標を保存するとどうなるか,実
|
633
|
-
験する.</p>
|
634
|
-
|
635
|
-
|
636
|
-
<pre syntax="ruby">
|
637
|
-
require 'sgl'
|
638
|
-
|
639
|
-
def setup
|
640
|
-
window -200, -200, 200, 200
|
641
|
-
background 100
|
642
|
-
$xpos = [] # 中身が空の配列を,x座標,y座標について用意する.
|
643
|
-
$ypos = []
|
644
|
-
for a in 0..10 # 配列の要素それぞれについて繰り返す.
|
645
|
-
$xpos[a] = 0
|
646
|
-
$ypos[a] = 0
|
647
|
-
end
|
648
|
-
$index = 0 # 現在配列のどこの部分を指しているかを示す変数.
|
649
|
-
end
|
650
|
-
|
651
|
-
def display
|
652
|
-
$xpos[$index] = mouseX
|
653
|
-
$ypos[$index] = mouseY
|
654
|
-
|
655
|
-
for a in 0..10 # 配列の要素それぞれについて繰り返す.
|
656
|
-
x = $xpos[a]
|
657
|
-
y = $ypos[a]
|
658
|
-
color 0
|
659
|
-
circle x, y, 50
|
660
|
-
end
|
661
|
-
|
662
|
-
$index = $index + 1 # 現在を示す$indexを,次の値のところにセットする.
|
663
|
-
if 10 < $index # $indexが配列の最大を越えたら,0にセットしなおす.
|
664
|
-
$index = 0
|
665
|
-
end
|
666
|
-
|
667
|
-
p $xpos
|
668
|
-
p $ypos
|
669
|
-
end
|
670
|
-
|
671
|
-
mainloop
|
672
|
-
</pre>
|
673
|
-
|
674
|
-
<p>このように値を保存する配列を増やしていくようにする.</p>
|
675
|
-
<p class="coda">
|
676
|
-
20th June 2007<br>
|
677
|
-
</p>
|
678
|
-
</div>
|
679
|
-
|
680
|
-
<!-- insert site tracking codes here, like Google Urchin -->
|
681
|
-
|
682
|
-
</body>
|
683
|
-
</html>
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
7
|
+
<title>
|
8
|
+
練習問題2
|
9
|
+
</title>
|
10
|
+
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
11
|
+
<style>
|
12
|
+
|
13
|
+
</style>
|
14
|
+
<script type="text/javascript">
|
15
|
+
window.onload = function() {
|
16
|
+
settings = {
|
17
|
+
tl: { radius: 10 },
|
18
|
+
tr: { radius: 10 },
|
19
|
+
bl: { radius: 10 },
|
20
|
+
br: { radius: 10 },
|
21
|
+
antiAlias: true,
|
22
|
+
autoPad: true,
|
23
|
+
validTags: ["div"]
|
24
|
+
}
|
25
|
+
var versionBox = new curvyCorners(settings, document.getElementById("version"));
|
26
|
+
versionBox.applyCornersToAll();
|
27
|
+
}
|
28
|
+
</script>
|
29
|
+
</head>
|
30
|
+
<body>
|
31
|
+
<div id="main">
|
32
|
+
|
33
|
+
<h1>練習問題2</h1>
|
34
|
+
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/sgl"; return false'>
|
35
|
+
<p>Get Version</p>
|
36
|
+
<a href="http://rubyforge.org/projects/sgl" class="numbers">1.0.0</a>
|
37
|
+
</div>
|
38
|
+
<h2>課題14: マウスの位置に反応する形</h2>
|
39
|
+
|
40
|
+
|
41
|
+
<pre syntax="ruby">
|
42
|
+
# kadai14.rb
|
43
|
+
require 'sgl'
|
44
|
+
|
45
|
+
window 200,200
|
46
|
+
|
47
|
+
loop do
|
48
|
+
x = mouseX
|
49
|
+
y = mouseY
|
50
|
+
rect x-5, y-5, x+5, y+5
|
51
|
+
flip
|
52
|
+
end
|
53
|
+
</pre>
|
54
|
+
|
55
|
+
<p>mouseXとmouseYでマウス位置を取得する.rectで四角形を描画する.</p>
|
56
|
+
|
57
|
+
|
58
|
+
<p>rectの前に<code>color x, y, 0</code>をいれてみる.</p>
|
59
|
+
|
60
|
+
|
61
|
+
rectの後に下記をいれてみる.
|
62
|
+
<pre syntax="ruby">
|
63
|
+
line 0, 0, x, y
|
64
|
+
line 200, 0, x, y
|
65
|
+
line 0, 200, x, y
|
66
|
+
line 200, 200, x, y
|
67
|
+
</pre>
|
68
|
+
|
69
|
+
<h2>課題15: 複雑な形の描画</h2>
|
70
|
+
|
71
|
+
|
72
|
+
<pre syntax="ruby">
|
73
|
+
# kadai15.rb
|
74
|
+
require 'sgl'
|
75
|
+
|
76
|
+
window -200, -200, 200, 200
|
77
|
+
|
78
|
+
beginObj(POLYGON)
|
79
|
+
vertex 60, 90
|
80
|
+
vertex -120, 60
|
81
|
+
vertex -90, -90
|
82
|
+
vertex 120, -90
|
83
|
+
endObj
|
84
|
+
|
85
|
+
wait
|
86
|
+
</pre>
|
87
|
+
|
88
|
+
<p><code>window -200, -200, 200, 200</code>のようにして四つの値を指定できる.
|
89
|
+
beginObjとendObjではさまれた領域で形を描く.</p>
|
90
|
+
|
91
|
+
|
92
|
+
<pre syntax="ruby">
|
93
|
+
beginObj(POLYGON)
|
94
|
+
color 100, 0, 0, 100
|
95
|
+
vertex 60, 90
|
96
|
+
color 0, 100, 0, 100
|
97
|
+
vertex -120, 60
|
98
|
+
color 0, 0, 100, 100
|
99
|
+
vertex -90, -90
|
100
|
+
color 100, 100, 0, 100
|
101
|
+
vertex 120, -90
|
102
|
+
endObj
|
103
|
+
</pre>
|
104
|
+
|
105
|
+
<p>頂点ごとに色を指定できる.</p>
|
106
|
+
|
107
|
+
|
108
|
+
<pre syntax="ruby">
|
109
|
+
beginObj(POLYGON)
|
110
|
+
color 100, 0, 0, 0
|
111
|
+
vertex 60, 90
|
112
|
+
color 0, 100, 0, 100
|
113
|
+
vertex -120, 60
|
114
|
+
color 0, 0, 100, 100
|
115
|
+
vertex -90, -90
|
116
|
+
color 100, 100, 0, 0
|
117
|
+
vertex 120, -90
|
118
|
+
endObj
|
119
|
+
</pre>
|
120
|
+
|
121
|
+
<p>頂点ごとに透明度も変えられる.</p>
|
122
|
+
|
123
|
+
|
124
|
+
<h2>課題16: スムースな線の描画</h2>
|
125
|
+
|
126
|
+
|
127
|
+
<pre syntax="ruby">
|
128
|
+
# kadai16.rb
|
129
|
+
require 'sgl'
|
130
|
+
|
131
|
+
useSmooth
|
132
|
+
|
133
|
+
window -200, -200, 200, 200
|
134
|
+
|
135
|
+
beginObj(LINE_LOOP)
|
136
|
+
color 100, 0, 0, 100
|
137
|
+
vertex 60, 90
|
138
|
+
color 0, 100, 0, 50
|
139
|
+
vertex -120, 60
|
140
|
+
color 0, 0, 100, 50
|
141
|
+
vertex -90, -90
|
142
|
+
color 100, 100, 0, 100
|
143
|
+
vertex 120, -90
|
144
|
+
endObj
|
145
|
+
|
146
|
+
wait
|
147
|
+
</pre>
|
148
|
+
|
149
|
+
<p>windowの前にuseSmoothを指定することによって,アンチエイリアスを
|
150
|
+
かけることができる.</p>
|
151
|
+
|
152
|
+
|
153
|
+
<p>beginObjの括弧の中は,<code>POLYGON</code>または<code>LINE_LOOP</code>を指定する.
|
154
|
+
この二つがあればほぼ十分であるが,他に下記方法も指定できる.</p>
|
155
|
+
|
156
|
+
|
157
|
+
<p><span class="caps">LINES</span>, POINTS, <span class="caps">LINE</span>_STRIP, <span class="caps">LINE</span>_LOOP, <span class="caps">TRIANGLES</span>, TRIANGLE_STRIP,
|
158
|
+
<span class="caps">TRIANGLE</span>_FAN, <span class="caps">QUADS</span>, QUAD_STRIP, <span class="caps">POLYGON</span>,</p>
|
159
|
+
|
160
|
+
|
161
|
+
<h2>課題17: 物体の移動</h2>
|
162
|
+
|
163
|
+
|
164
|
+
<pre syntax="ruby">
|
165
|
+
# kadai17.rb
|
166
|
+
require 'sgl'
|
167
|
+
|
168
|
+
useSmooth
|
169
|
+
|
170
|
+
window -200, -200, 200, 200
|
171
|
+
|
172
|
+
push
|
173
|
+
translate 100, 0
|
174
|
+
rotateZ 10
|
175
|
+
scale 2
|
176
|
+
rect -5, -5, 5, 5
|
177
|
+
pop
|
178
|
+
|
179
|
+
wait
|
180
|
+
</pre>
|
181
|
+
|
182
|
+
<p>今回でてきた新しいコマンド,
|
183
|
+
push, pop, translate, rotateZ, scaleを使って回転移動拡大縮小などができ
|
184
|
+
るようになる.pushとpopで囲まれていることが非常に重要である.また襦袢
|
185
|
+
として,translate, rotateZ, scaleの順番に指定することが重要.形を描く
|
186
|
+
コマンドと,位置,回転角度などの指定を分離できる.</p>
|
187
|
+
|
188
|
+
|
189
|
+
<h2>課題18: ボタンが押された時に</h2>
|
190
|
+
|
191
|
+
|
192
|
+
<pre syntax="ruby">
|
193
|
+
# kadai18.rb
|
194
|
+
require 'sgl'
|
195
|
+
|
196
|
+
def setup
|
197
|
+
window -200, -200, 200, 200
|
198
|
+
background 0
|
199
|
+
$x = 0
|
200
|
+
$y = 0
|
201
|
+
end
|
202
|
+
|
203
|
+
def onMouseDown(x, y)
|
204
|
+
$x = x
|
205
|
+
$y = y
|
206
|
+
end
|
207
|
+
|
208
|
+
def display
|
209
|
+
line 0, 0, $x, $y
|
210
|
+
end
|
211
|
+
|
212
|
+
mainloop
|
213
|
+
</pre>
|
214
|
+
|
215
|
+
<p>いままではプログラムはかかれている順番通りに実行されるものだったが,こ
|
216
|
+
こでは違う順序となっている.まず最初にコマンドを登録し,それが後に呼ば
|
217
|
+
れて実行されることになる.このようにプログラムの実行順番が違う方式をこ
|
218
|
+
れから採用する.</p>
|
219
|
+
|
220
|
+
|
221
|
+
<p>setup, onMouseDown, displayというコマンドを登録する.その後mainloopと
|
222
|
+
いうコマンドを呼ぶ.このメインループの中で,全てのプログラムが実行され,
|
223
|
+
適宜setup, displayが呼び出される.マウスのボタンが押された瞬間に,
|
224
|
+
onMouseDownというコマンドが呼ばれる.</p>
|
225
|
+
|
226
|
+
|
227
|
+
<p>そのonMouseDownの前に,$xという$のついた変数がつかわれている.変数には
|
228
|
+
それぞれ使える範囲というのもがあるのだが,通常は一つのコマンドの範囲内
|
229
|
+
でしか使うことができなかった.しかし,$のついた変数であれば,プログラ
|
230
|
+
ムが動いている間ずっと残る.プログラムの最初の部分で,<code>$x = 0</code>のように
|
231
|
+
して,あらかじめなんらかの値を代入することで,変数を使うということを示
|
232
|
+
す必要がある.</p>
|
233
|
+
<p class="coda">
|
234
|
+
30th June 2007<br>
|
235
|
+
</p>
|
236
|
+
</div>
|
237
|
+
|
238
|
+
<!-- insert site tracking codes here, like Google Urchin -->
|
239
|
+
|
240
|
+
</body>
|
241
|
+
</html>
|