この記事は、SYSKEN Advent Calendar 2022 12月14日の記事です。
はじめに
皆さん初めまして、こんにちは、赤石匠です。
もう少しでクリスマスですね。私はクリスマス当日は予定があって遊ぶことはできませんが、ホワイトクリスマスになるといいですね。
ということで雪の結晶のような模様を描いてみましょう。プログラムで
本題
手順としては、
・どのようにして模様を描くか考える
今回の場合グラフは使わず、□と■を使ってマスを表します。
・どうやって模様を作るか
今回は、数式を使って、模様を描きます。
・プログラム作成
今回は、C++で、プログラムを組みました。マスを全て□で埋め、式で出てきたマスを■に変えていきます。
と、いう順でやっていきました。
今回使う数式はこちらです。
r=sin(nθ/k)
この式のnとkを変えるといろいろな模様ができます。
そして模様を描いてくれるプログラムがこちらです。
#include<bits/stdc++.h> using namespace std; int main(){ int size,n,k; cin>>size>>n>>k; vector<vector<int>>f(2*size,vector<int>(2*size)); for(int i=0;2*size>i;i++){ for(int j=0;2*size>j;j++){ f.at(i).at(j)=false; } } for(double i=0;360>n*i/k;i+=0.01){ double r=sin(n*i/k); double x=r*cos(i); double y=r*sin(i); f.at(floor((double)size*y+size)).at(floor((double)size*x+size))=true; } for(int i=2*size-1;0<=i;i--){ for(int j=0;2*size>j;j++){ if(f.at(i).at(j)) cout<<"■"; else{cout<<"□";} } cout<<endl; } }
遊ぶ
このプログラムにサイズ n kの値を打ち込むと
(例1)
10 2 1
このような模様が現れます。
□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□
□□■■■■■□□□□□□■■■■■□□
□□■□□□■■□□□□■■□□□■□□
□□■□□□□■■□□■■□□□□■□□
□□■□□□□□■■■■□□□□□■□□
□□■■□□□□□■■□□□□□■■□□
□□□■■□□□□■■□□□□■■□□□
□□□□■■□□□■■□□□■■□□□□
□□□□□■■■■■■■■■■□□□□□
□□□□□■■■■■■■■■■□□□□□
□□□□■■□□□■■□□□■■□□□□
□□□■■□□□□■■□□□□■■□□□
□□■■□□□□□■■□□□□□■■□□
□□■□□□□□■■■■□□□□□■□□
□□■□□□□■■□□■■□□□□■□□
□□■□□□■■□□□□■■□□□■□□
□□■■■■■□□□□□□■■■■■□□
□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□
「雪の結晶に見えない!」と思う人もいると思います。
そうです。これは花の模様です。雪の結晶のような花の模様です。
なぜ花の模様になったのかは、聞かないでください。 実力不足です。
そんなことはさておき、つぎは、このように打ち込んでみます。
(例2)
20 3 4
これで、プログラムを実行すると、
□□□□□□□□□□□□□□□■■■□□□□■■■□□□□□□□□□□□□□□□
□□□□□□□□□□□■■■■■□■■■■■■□■■■■■□□□□□□□□□□□
□□□□□□□□□■■■□□□□■■■□□■■■□□□□■■■□□□□□□□□□
□□□□□□□□■■□□□□□■■□□□□□□■■□□□□□■■□□□□□□□□
□□□□□□□■■□□□□□■■□□□□□□□□■■□□□□□■■□□□□□□□
□□□□□□■■□□□□□■■□□□□□□□□□□■■□□□□□■■□□□□□□
□□□□□■■□□□□□□■□□□□□□□□□□□□■□□□□□□■■□□□□□
□□□□■■□□□■■■■■■□□□□□□□□□□■■■■■■□□□■■□□□□
□□□□■□■■■■□□■□■■■□□□□□□■■■□■□□■■■■□■□□□□
□□□□■■■□□□□□■□□□■■■□□■■■□□□■□□□□□■■■□□□□
□□□■■□□□□□□□■□□□□□■■■■□□□□□■□□□□□□□■■□□□
□□■■□□□□□□□□■□□□□□□■■□□□□□□■□□□□□□□□■■□□
□□■■□□□□□□□□■□□□□□□■■□□□□□□■□□□□□□□□■■□□
□■■■□□□□□□□□■□□□□□□■■□□□□□□■□□□□□□□□■■■□
□■□■□□□□□□□□■□□□□□□■■□□□□□□■□□□□□□□□■□■□
■■□■■□□□□□□□■■□□□□■■■■□□□□■■□□□□□□□■■□■■
■□□□■□□□□■■■■■■■■□■■■■□■■■■■■■■□□□□■□□□■
■□□□■□□■■■□□□■■□■■■■■■■■□■■□□□■■■□□■□□□■
■□□□■■■■□□□□□□■■■□■■■■□■■■□□□□□□■■■■□□□■
■□□□□■■□□□□□□□□□■■■■■■■■□□□□□□□□□■■□□□□■
■□□□□■■□□□□□□□□□■■■■■■■■□□□□□□□□□■■□□□□■
■□□□■■■■□□□□□□■■■□■■■■□■■■□□□□□□■■■■□□□■
■□□□■□□■■■□□□■■□■■■■■■■■□■■□□□■■■□□■□□□■
■□□□■□□□□■■■■■■■■□■■■■□■■■■■■■■□□□□■□□□■
■■□■■□□□□□□□■■□□□□■■■■□□□□■■□□□□□□□■■□■■
□■□■□□□□□□□□■□□□□□□■■□□□□□□■□□□□□□□□■□■□
□■■■□□□□□□□□■□□□□□□■■□□□□□□■□□□□□□□□■■■□
□□■■□□□□□□□□■□□□□□□■■□□□□□□■□□□□□□□□■■□□
□□■■□□□□□□□□■□□□□□□■■□□□□□□■□□□□□□□□■■□□
□□□■■□□□□□□□■□□□□□■■■■□□□□□■□□□□□□□■■□□□
□□□□■■■□□□□□■□□□■■■□□■■■□□□■□□□□□■■■□□□□
□□□□■□■■■■□□■□■■■□□□□□□■■■□■□□■■■■□■□□□□
□□□□■■□□□■■■■■■□□□□□□□□□□■■■■■■□□□■■□□□□
□□□□□■■□□□□□□■□□□□□□□□□□□□■□□□□□□■■□□□□□
□□□□□□■■□□□□□■■□□□□□□□□□□■■□□□□□■■□□□□□□
□□□□□□□■■□□□□□■■□□□□□□□□■■□□□□□■■□□□□□□□
□□□□□□□□■■□□□□□■■□□□□□□■■□□□□□■■□□□□□□□□
□□□□□□□□□■■■□□□□■■■□□■■■□□□□■■■□□□□□□□□□
□□□□□□□□□□□■■■■■□■■■■■■□■■■■■□□□□□□□□□□□
□□□□□□□□□□□□□□□■■■□□□□■■■□□□□□□□□□□□□□□□
なんだか複雑な模様ができましたね。
おわりに
模様を作ろうとしていたときは、グラフにしてやろうとしていたのですが、グラフにするやり方を知らなかったので、正方形をたくさん並べて方眼紙のようにすることができたので、まあまあ、そこそこいいものが作れたのではないでしょうか。
次回のSYSKEN Advent Calendar 2022は12月16日、担当はmaronnです。お楽しみに。
コメントを残す