前提・実現したいこと
コッホ曲線(フラクタル図形を求める問題)をキューを用いて解こうとしているのですが、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()の部分は問題ないと思うのですが、なぜ動かないかわかりません。
うまく働かないとはどういう動作をするんでしょうか
n=2で
66.6666666667 0.0000000000
50.0000000000 -28.8675134595
33.3333333333 0.0000000000
0.0000000000 0.0000000000
11.1111111111 0.0000000000
12.9629629630 3.2075014955
16.6666666667 6.4150029910
14.8148148148 6.4150029910
16.6666666667 9.6225044865
22.2222222222 0.0000000000
25.9259259259 0.0000000000
27.7777777778 3.2075014955
29.6296296296 0.0000000000
33.3333333333 0.0000000000
50.0000000000 28.8675134595
51.8518518519 25.6600119640
50.0000000000 25.6600119640
53.7037037037 22.4525104685
55.5555555556 19.2450089730
50.0000000000 19.2450089730
53.7037037037 16.0375074775
52.7777777778 17.6412582252
57.4074074074 12.8300059820
61.1111111111 9.6225044865
66.6666666667 0.0000000000
77.7777777778 0.0000000000
83.3333333333 9.6225044865
88.8888888889 0.0000000000
100.0000000000 0.0000000000
と異なる解を示してしまいます。
うまく働いた場合はどういう解を示すんでしょう。
それらを、質問文を編集して、質問に追記しましょう
すみませんでした。追加いたしました。

回答2件
あなたの回答
tips
プレビュー



