Sierpinski square curve: Difference between revisions
m
Refactored C++ code
(Add Factor) |
m (Refactored C++ code) |
||
Line 13:
#include <string>
class sierpinski_square {
std::string rewrite(const std::string& s) {▼
public:
void write(std::ostream& out, int size, int length, int order);
private:
void line(std::ostream& out);
void execute(std::ostream& out, const std::string& s);
double x_;
double y_;
int angle_;
int length_;
};
void sierpinski_square::write(std::ostream& out, int size, int length, int order) {
length_ = length;
y_ = length;
angle_ = 0;
out << "<svg xmlns='http://www.w3.org/2000/svg' width='"▼
<< size << "' height='" << size << "'>\n";▼
out << "<rect width='100%' height='100%' fill='white'/>\n";▼
out << "<path stroke-width='1' stroke='black' fill='none' d='";▼
std::string s = "F+XF+F+XF";▼
for (int i = 0; i < order; ++i)▼
s = rewrite(s);▼
execute(out, s);
out << "'/>\n</svg>\n";▼
}
std::string sierpinski_square::rewrite(const std::string& s) {
std::string t;
for (char c : s) {
Line 24 ⟶ 53:
}
void sierpinski_square::line(std::ostream& out
}
void sierpinski_square::execute(std::ostream& out, const std::string& s
out << 'M' << x_ <<
for (char c : s) {
case 'F':
break;
case '-':
angle_ = (angle_ - 90) % 360;
break;
}
}
}
int main() {
▲ const int size = 635, length = 5;
std::ofstream out("sierpinski_square.svg");
if (!out) {
Line 53 ⟶ 83:
return 1;
}
sierpinski_square s;
▲ out << "<svg xmlns='http://www.w3.org/2000/svg' width='"
s.write(out, 635, 5, 5);
▲ << size << "' height='" << size << "'>\n";
▲ out << "<rect width='100%' height='100%' fill='white'/>\n";
▲ out << "<path stroke-width='1' stroke='black' fill='none' d='";
▲ std::string s = "F+XF+F+XF";
▲ for (int i = 0; i < order; ++i)
▲ s = rewrite(s);
▲ out << "'/>\n</svg>\n";
return 0;
}</lang>
{{out}}
See: [https://slack-files.com/T0CNUL56D-
=={{header|Factor}}==
|