ryuchan00 / basic_programing

UEC
0 stars 0 forks source link

6 パソコン買ったーーーー。 #6

Open hayato0718 opened 4 years ago

hayato0718 commented 4 years ago

まちがい


オ     5.times do |i|
シ         if i < j
イ         end
ウ         a = Array.new(5) do Array.new(5) do 0 end end
タ         a[i][j] = 1
ソ         if i >= j
シ             if i < j
イ             end
イ         end
エ         return a
イ     end
hayato0718 commented 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
hayato0718 commented 4 years ago

まちがい


サ     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
hayato0718 commented 4 years ago

せいかい


ウ   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
ryuchan00 commented 4 years ago

最高!!!!1

hayato0718 commented 4 years ago

全然わかってないから期末まえにつめます!!!!

ryuchan00 commented 4 years ago

欲張りセット

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
ryuchan00 commented 4 years ago

パックマンの胴体を作る

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
ryuchan00 commented 4 years ago
\documentclass[12pt,a4j]{jarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage{url}
\begin{document}
\title{コンピュータリテラシレポート#14}
\author{1920031 、山川竜太郎}
\date{2019/07/26}
\maketitle

\section{テーマ}
著作権に配慮した形で、極力版権物のパロディは無くして、独断と偏見でアメリカンヒーロー風にクラス、及び教師の紹介をする。脚色も十分に取り入れている。
hayato0718 commented 4 years ago

放射円ぽいもの


  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に変換できなくて無事死亡しました。。。
ryuchan00 commented 4 years ago
# dvi(pdfを作る元)を作成
platex report06.tex
# pdfを作成
dvipdfmx report06.dvi
# メールでpdfを送信する
echo X | mail -s X -a report06.pdf hoge@gmail.com
ryuchan00 commented 4 years ago

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}
ryuchan00 commented 4 years ago

画像の処理

\begin{center}
\includegraphics[width=12cm]{mypicture.ps}
\end{center}

画像の変換

convert ファイル名 mypicture.ps
ryuchan00 commented 4 years ago

画像の変換方法

[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%            
ryuchan00 commented 4 years ago

ファイルを学校のサーバーに貼り付ける

cd fp19/6
vim report06.tex

vimを起動したら以下のコマンドを実行する。すると綺麗に貼り付けることができる。

:set paste!