質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

1058閲覧

rubyでの画像生成について

satosikyd

総合スコア11

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2017/11/11 06:18

大学で画像生成の課題があってよくわからないので質問させていただきます。
Pixel = Struct.new(:r, :g, :b)
$img = Array.new(200) do Array.new(300) do Pixel.new(255,255,255) end end
def pset(x, y, r, g, b)
if 0 <= x && x < 300 && 0 <= y && y < 200
$img[y][x].r = r; $img[y][x].g = g; $img[y][x].b = b
end
end
def writeimage(name)
open(name, "wb") do |f|
f.puts("P6\n300 200\n255")
$img.each do |a| a.each do |p| f.write(p.to_a.pack('ccc')) end end
end
end
def mypicture
pset(100, 80, 255,0 ,0 )
writeimage('t.ppm')
end

これを水平垂直斜めに引くように変更するにはどうしたらいいでしょうか。
プログラミング初心者なのでよろしくご指導ご鞭撻のほどお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ruby

1Pixel = Struct.new(:r, :g, :b) 2$img = Array.new(200) do 3 Array.new(300) do 4 Pixel.new(255,255,255) 5 end 6end 7 8def pset(x, y, r, g, b) 9 if 0 <= x && x < 300 && 0 <= y && y < 200 10 $img[y][x].r = r; 11 $img[y][x].g = g; 12 $img[y][x].b = b 13 end 14end 15 16def writeimage(name) 17 open(name, "wb") do |f| 18 f.puts("P6\n300 200\n255") 19 $img.each do |a| 20 a.each do |p| 21 f.write(p.to_a.pack('ccc')) 22 end 23 end 24 end 25end 26 27def mypicture 28 pset(100, 80, 255,0 ,0 ) 29 writeimage('t.ppm') 30end

ご質問の際、コードは上のように囲み、(方法はヘルプをお読みください)
回答者が見やすいようにしてください。ご協力お願いします。
なお、インデントは手動で付けました。


丸投げで、解答だけ知っても力がつかないので、調べ方を言いますね。
コードリーディングも、英文読解と同じで、文法と単語で解読していきます。

たとえば、二行目に「Array.new」があります。
たとえ「Array」の内容を知らなくても
Rubyの文法では、「A.b」の構文のとき、
Aがオブジェクトでbがメソッドというルールです。
英語の主語と述語の順序(英語と違って倒置はない)です。

さらに、「.new」しているとき、Aはクラス(正確にはクラス名の定数)です。
右辺値で初登場しているので、組み込みクラスだと予想できます。
(課題だから予想できますが、現実には未定義のバグもありえます)
$imgはnewで生成されたインスタンスを参照する変数です。

さしあたり、「Ruby Array」で検索してみてください。
そして、同様に「each」などの単語を調べてください。

投稿2017/11/11 09:45

編集2017/11/11 09:47
LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satosikyd

2017/11/12 07:38

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問