前提・実現したいこと
コッホ曲線(フラクタル図形を求める問題)をキューを用いて解こうとしているのですが、n=2以降うまく働かず困っております。どなたか解決策を教えていただきたいです。
該当のソースコード
C++
1#include <iostream> 2#include <queue> 3#include <vector> 4#include <algorithm> 5#include <cmath> 6#include <iomanip> 7 8using namespace std; 9 10queue<pair<long double, long double> > p; 11const long double h = sqrt(3)/2.0; 12 13void fractale(){ 14 pair<long double, long double> l, r, temp; 15 do { 16 l = p.front(); p.pop(); 17 r = p.front(); p.pop(); 18 long double theta = atan2(r.second-l.second, r.first-l.first); 19 long double leng = sqrt((r.second-l.second)*(r.second-l.second)+(r.first-l.first)*(r.first-l.first)); 20 p.push(l); 21 temp = make_pair(l.first+(r.first-l.first)/3.0, l.second+(r.second-l.second)/3.0); 22 p.push(temp); 23 p.push(temp); 24 temp = make_pair(l.first+(r.first-l.first)/2.0+leng*h*sin(theta)/3.0, l.second+(r.second-l.second)/2.0+leng*h*cos(theta)/3.0); 25 p.push(temp); 26 p.push(temp); 27 temp = make_pair(l.first+2*(r.first-l.first)/3.0, l.second+2*(r.second-l.second)/3.0); 28 p.push(temp); 29 p.push(temp); 30 p.push(r); 31 } while (r.first != 100); 32} 33 34int main(){ 35 int n; 36 cin >> n; 37 pair<long double, long double> temp = make_pair(0.0, 0.0); 38 p.push(temp); 39 temp = make_pair(100.0, 0.0); 40 p.push(temp); 41 for (int i = 0; i < n; i++){ 42 fractale(); 43 } 44 cout << fixed << setprecision(10); 45 cout << p.front().first << " " << p.front().second << endl; 46 p.pop(); 47 do { 48 cout << p.front().first << " " << p.front().second << endl; 49 p.pop(); p.pop(); 50 } while (p.front().first != 100); 51 cout << p.front().first << " " << p.front().second << endl; 52}
試したこと
回答ありがとうございます。ご指摘の内容をもとに改善したのですが、今度は動作しないようになってしまいました。n>=1の入力を仮定しているので、pop()の部分は問題ないと思うのですが、なぜ動かないかわかりません。
回答2件
あなたの回答
tips
プレビュー