Open hayato0718 opened 4 years ago
せいかい
ウ a = Array.new(5) do Array.new(5) do 0 end end
オ 5.times do |i|
カ 5.times do |j|
タ a[i][j] = 1
イ end
イ end
エ return a
イ end
まちがい
サ 4.step(0, -1) do |i|
キ 0.step(i) do |j|
カ 0.step(4) do |j|
オ 0.step(4) do |i|
シ 4.step(0, -1) do |j|
ス a[i][j] = x
イ end
イ end
イ end
イ end
エ return a
イ end
せいかい
ウ a = Array.new(5) do Array.new(5) do 0 end end
セ x = 1
オ 0.step(4) do |i|
カ 0.step(4) do |j|
ス a[i][j] = x
ソ x = x + 1
イ end
イ end
エ return a
イ end
最高!!!!1
全然わかってないから期末まえにつめます!!!!
欲張りセット
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 = 0, g = 0, b = 0, a = 0.0)
if x < 0 || x >= 300 || y < 0 || y >= 200 then
return
end
$img[y][x].r = ($img[y][x].r * a + r * (1.0 - a)).to_i
$img[y][x].g = ($img[y][x].g * a + g * (1.0 - a)).to_i
$img[y][x].b = ($img[y][x].b * a + b * (1.0 - a)).to_i
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
return true
end
def fillcircle(x, y, rad, r = 0, g = 0, b = 0, a = 0.0)
j0 = (y - rad).to_i; j1 = (y + rad).to_i
i0 = (x - rad).to_i; i1 = (x + rad).to_i
j0.step(j1) do |j|
i0.step(i1) do |i|
if (i - x) ** 2 + (j - y) ** 2 < rad ** 2
if block_given? then
yield(i, j)
else
pset(i, j, r, g, b, a)
end
end
end
end
end
def fillrect(x, y, w, h, r = 0, g = 0, b = 0, a = 0.0)
j0 = (y - 0.5 * h).to_i; j1 = (y + 0.5 * h).to_i
i0 = (x - 0.5 * w).to_i; i1 = (x + 0.5 * w).to_i
j0.step(j1) do |j|
i0.step(i1) do |i|
if block_given? then
yield(i, j)
else
pset(i, j, r, g, b, a)
end
end
end
end
def filldonut(x, y, r1, r2, r = 0, g = 0, b = 0, a = 0.0)
j0 = (y - r1).to_i; j1 = (y + r1).to_i
i0 = (x - r1).to_i; i1 = (x + r1).to_i
j0.step(j1) do |j|
i0.step(i1) do |i|
d2 = (i - x) ** 2 + (j - y) ** 2
if r2 ** 2 <= d2 && d2 <= r1 ** 2
if block_given? then
yield(i, j)
else
pset(i, j, r, g, b, a)
end
end
end
end
end
def fillellipse(x, y, rx, ry, r = 0, g = 0, b = 0, a = 0.0)
j0 = (y - ry).to_i; j1 = (y + ry).to_i
i0 = (x - rx).to_i; i1 = (x + rx).to_i
j0.step(j1) do |j|
i0.step(i1) do |i|
if ((i - x).to_f / rx) ** 2 + ((j - y).to_f / ry) ** 2 < 1.0
if block_given? then
yield(i, j)
else
pset(i, j, r, g, b, a)
end
end
end
end
end
def fillrotellipse(x, y, rx, ry, theta, r = 0, g = 0, b = 0, a = 0.0)
d = (
if rx > ry then
rx
else
ry
end)
j0 = (y - d).to_i; j1 = (y + d).to_i
i0 = (x - d).to_i; i1 = (x + d).to_i
j0.step(j1) do |j|
i0.step(i1) do |i|
dx = i - x; dy = j - y;
px = dx * Math.cos(theta) - dy * Math.sin(theta)
py = dx * Math.sin(theta) + dy * Math.cos(theta)
if (px / rx) ** 2 + (py / ry) ** 2 < 1.0
if block_given? then
yield(i, j)
else
pset(i, j, r, g, b, a)
end
end
end
end
end
def filltriangle(x0, y0, x1, y1, x2, y2, r, g, b, a = 0.0)
fillconvex([x0, x1, x2, x0], [y0, y1, y2, y0], r, g, b, a)
fillconvex([x0, x2, x1, x0], [y0, y2, y1, y0], r, g, b, a)
end
def fillconvex(ax, ay, r = 0, g = 0, b = 0, a = 0.0)
xmax = ax.max.to_i; xmin = ax.min.to_i
ymax = ay.max.to_i; ymin = ay.min.to_i
ymin.step(ymax) do |j|
xmin.step(xmax) do |i|
if isinside(i, j, ax, ay)
if block_given? then
yield(i, j)
else
pset(i, j, r, g, b, a)
end
end
end
end
end
def isinside(x, y, ax, ay)
(ax.length - 1).times do |i|
if oprod(ax[i + 1] - ax[i], ay[i + 1] - ay[i], x - ax[i], y - ay[i]) < 0
return false
end
end
return true
end
def oprod(a, b, c, d)
return a * d - b * c;
end
def fillline(x0, y0, x1, y1, w, r = 0, g = 0, b = 0, a = 0.0)
dx = y1 - y0; dy = x0 - x1; n = 0.5 * w / Math.sqrt(dx ** 2 + dy ** 2)
dx = dx * n; dy = dy * n
fillconvex([x0 - dx, x0 + dx, x1 + dx, x1 - dx, x0 - dx],
[y0 - dy, y0 + dy, y1 + dy, y1 - dy, y0 - dy], r, g, b, a)
end
def mypicture4
fillcircle(150, 30, 60, 255, 100, 70, 0.0)
fillrect(60, 100, 120, 80, 80, 220, 255, 0.6)
fillrotellipse(200, 60, 70, 40, 1.0, 100, 100, 220, 0.7)
filltriangle(200, 100, 300, 100, 250, 200, 200, 100, 250, 0.5)
fillline(40, 40, 260, 160, 4, 0, 0, 0, 0.0)
filldonut(190, 100, 120, 90, 150, 100, 80, 0.5)
writeimage(__FILE__.match(%{(^.*).rb})[1] + ".ppm")
end
# --- ここからパックマンの敵、ゴーストを作るためのメソッド集
def ghosts(n)
square(100, 100, 50, 50)
writeimage(__FILE__.match(%{(^.*).rb})[1] + ".ppm")
end
def square(x, y, x0, y0)
end
パックマンの胴体を作る
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 = 0, g = 0, b = 0, a = 0.0)
if x < 0 || x >= 300 || y < 0 || y >= 200 then
return
end
$img[y][x].r = ($img[y][x].r * a + r * (1.0 - a)).to_i
$img[y][x].g = ($img[y][x].g * a + g * (1.0 - a)).to_i
$img[y][x].b = ($img[y][x].b * a + b * (1.0 - a)).to_i
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
return true
end
def fillcircle(x, y, rad, r = 0, g = 0, b = 0, a = 0.0)
j0 = (y - rad).to_i; j1 = (y + rad).to_i
i0 = (x - rad).to_i; i1 = (x + rad).to_i
j0.step(j1) do |j|
i0.step(i1) do |i|
if (i - x) ** 2 + (j - y) ** 2 < rad ** 2
if block_given? then
yield(i, j)
else
pset(i, j, r, g, b, a)
end
end
end
end
end
# rectangleの略
# w:widthの略、幅という意味
# h:heightの略、高さという意味
def fillrect(x, y, w, h, r = 0, g = 0, b = 0, a = 0.0)
j0 = (y - 0.5 * h).to_i
j1 = (y + 0.5 * h).to_i
i0 = (x - 0.5 * w).to_i
i1 = (x + 0.5 * w).to_i
j0.step(j1) do |j|
i0.step(i1) do |i|
if block_given? then
yield(i, j)
else
pset(i, j, r, g, b, a)
end
end
end
end
def filldonut(x, y, r1, r2, r = 0, g = 0, b = 0, a = 0.0)
j0 = (y - r1).to_i; j1 = (y + r1).to_i
i0 = (x - r1).to_i; i1 = (x + r1).to_i
j0.step(j1) do |j|
i0.step(i1) do |i|
d2 = (i - x) ** 2 + (j - y) ** 2
if r2 ** 2 <= d2 && d2 <= r1 ** 2
if block_given? then
yield(i, j)
else
pset(i, j, r, g, b, a)
end
end
end
end
end
def fillellipse(x, y, rx, ry, r = 0, g = 0, b = 0, a = 0.0)
j0 = (y - ry).to_i; j1 = (y + ry).to_i
i0 = (x - rx).to_i; i1 = (x + rx).to_i
j0.step(j1) do |j|
i0.step(i1) do |i|
if ((i - x).to_f / rx) ** 2 + ((j - y).to_f / ry) ** 2 < 1.0
if block_given? then
yield(i, j)
else
pset(i, j, r, g, b, a)
end
end
end
end
end
def fillrotellipse(x, y, rx, ry, theta, r = 0, g = 0, b = 0, a = 0.0)
d = (
if rx > ry then
rx
else
ry
end)
j0 = (y - d).to_i; j1 = (y + d).to_i
i0 = (x - d).to_i; i1 = (x + d).to_i
j0.step(j1) do |j|
i0.step(i1) do |i|
dx = i - x; dy = j - y;
px = dx * Math.cos(theta) - dy * Math.sin(theta)
py = dx * Math.sin(theta) + dy * Math.cos(theta)
if (px / rx) ** 2 + (py / ry) ** 2 < 1.0
if block_given? then
yield(i, j)
else
pset(i, j, r, g, b, a)
end
end
end
end
end
def filltriangle(x0, y0, x1, y1, x2, y2, r, g, b, a = 0.0)
fillconvex([x0, x1, x2, x0], [y0, y1, y2, y0], r, g, b, a)
fillconvex([x0, x2, x1, x0], [y0, y2, y1, y0], r, g, b, a)
end
def fillconvex(ax, ay, r = 0, g = 0, b = 0, a = 0.0)
xmax = ax.max.to_i; xmin = ax.min.to_i
ymax = ay.max.to_i; ymin = ay.min.to_i
ymin.step(ymax) do |j|
xmin.step(xmax) do |i|
if isinside(i, j, ax, ay)
if block_given? then
yield(i, j)
else
pset(i, j, r, g, b, a)
end
end
end
end
end
def isinside(x, y, ax, ay)
(ax.length - 1).times do |i|
if oprod(ax[i + 1] - ax[i], ay[i + 1] - ay[i], x - ax[i], y - ay[i]) < 0
return false
end
end
return true
end
def oprod(a, b, c, d)
return a * d - b * c;
end
def fillline(x0, y0, x1, y1, w, r = 0, g = 0, b = 0, a = 0.0)
dx = y1 - y0; dy = x0 - x1; n = 0.5 * w / Math.sqrt(dx ** 2 + dy ** 2)
dx = dx * n; dy = dy * n
fillconvex([x0 - dx, x0 + dx, x1 + dx, x1 - dx, x0 - dx],
[y0 - dy, y0 + dy, y1 + dy, y1 - dy, y0 - dy], r, g, b, a)
end
def mypicture4
# fillcircle(150, 30, 60, 255, 100, 70, 0.0)
# fillrect(60, 100, 120, 80, 80, 220, 255, 0.6)
# fillrotellipse(200, 60, 70, 40, 1.0, 100, 100, 220, 0.7)
# filltriangle(200, 100, 300, 100, 250, 200, 200, 100, 250, 0.5)
# fillline(40, 40, 260, 160, 4, 0, 0, 0, 0.0)
# filldonut(190, 100, 120, 90, 150, 100, 80, 0.5)
writeimage(__FILE__.match(%{(^.*).rb})[1] + ".ppm")
end
# --- ここからパックマンの敵、ゴーストを作るためのメソッド集
# nはゴーストの数
def ghosts(n = 1)
# まずゴーストの胴体である長方形を配置する
fillrect(30, 40, 60, 30, 0, 0, 255, 0.0)
# ゴーストの頭となるような楕円を配置する
writeimage(__FILE__.match(%{(^.*).rb})[1] + ".ppm")
end
\documentclass[12pt,a4j]{jarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage{url}
\begin{document}
\title{コンピュータリテラシレポート#14}
\author{1920031 、山川竜太郎}
\date{2019/07/26}
\maketitle
\section{テーマ}
著作権に配慮した形で、極力版権物のパロディは無くして、独断と偏見でアメリカンヒーロー風にクラス、及び教師の紹介をする。脚色も十分に取り入れている。
放射円ぽいもの
fillcircle(100,100,150,0,0,0)
fillcircle(100,100,130,255,255,255)
fillcircle(100,100,120,0,0,0)
fillcircle(100,100,110,255,255,255)
fillcircle(100,100,100,0,0,0)
fillcircle(100,100,90,255,255,255)
fillcircle(100,100,80,0,0,0)
fillcircle(100,100,70,255,255,255)
fillcircle(100,100,60,0,0,0)
fillcircle(100,100,50,255,255,255)
fillcircle(100,100,40,0,0,0)
fillcircle(100,100,30,255,255,255)
fillcircle(100,100,20,0,0,0)
fillcircle(100,100,10,255,255,255)
writeimage("t.ppm")
end
latexに変換できなくて無事死亡しました。。。
# dvi(pdfを作る元)を作成
platex report06.tex
# pdfを作成
dvipdfmx report06.dvi
# メールでpdfを送信する
echo X | mail -s X -a report06.pdf hoge@gmail.com
report06のテスト
\documentclass[12pt,a4j]{jarticle}
\usepackage{graphicx}
\begin{document}
\title{基礎プログラミングおよび演習 レポート #06}
\author{学籍番号, 氏名 (ペア: 氏名・学籍番号または「個人作業」)}
\date{提出日付}
\maketitle
\section{構想・計画・設計}
(どのような構想で絵を生成したか、具体的にどのように計画し、プログラムはどう設計したか)
\section{プログラムコード}
\begin{verbatim}
(ここにプログラムのソースコードを入れる)
\end{verbatim}
(必ず動作するものを提出してください。また絵を生成するために呼び出すRuby命令を最後の行に追加する。)
(「ruby ファイル名」で実行できるようにするため。)
\section{プログラムの説明}
(プログラムのどの部分が何をしているかを説明する)
\section{生成された絵}
(どんな絵という説明を書くこと)
(絵の画像ファイル形式はPostScriptであること。プログラムと絵が一致してい
ること。ファイル名は適宜変更してよい。)
\begin{center}
\end{center}
\section{考察}
(考察は必須かつ重要。課題をやって分かったことや感想など。)
\section{アンケート}
\subsection{Q1:画像が自由に生成できるようになりましたか。}
(ここにQ1の回答を記入)
\subsection{Q2:画像をうまく生成する「コツ」は何だと思いましたか。}
(ここにQ2の回答を記入)
\subsection{Q3:リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。}
(ここにQ3の回答を記入)
\end{document}
画像の処理
\begin{center}
\includegraphics[width=12cm]{mypicture.ps}
\end{center}
画像の変換
convert ファイル名 mypicture.ps
画像の変換方法
[y1920031@sol]~/basic_programing/6% ls
packman.ppm packman.rb
[y1920031@sol]~/basic_programing/6% convert packman.ppm packman.ps
[y1920031@sol]~/basic_programing/6% ls
packman.ppm packman.ps packman.rb
[y1920031@sol]~/basic_programing/6% echo X | mail -s X -a packman.ps leokun0210@gmail.com
[y1920031@sol]~/basic_programing/6%
ファイルを学校のサーバーに貼り付ける
cd fp19/6
vim report06.tex
vimを起動したら以下のコマンドを実行する。すると綺麗に貼り付けることができる。
:set paste!
まちがい