书(http://www.stroustrup.com/programming1.html)第13章的练习8说:
定义一个Hexagon类(Hexagon是一个常规的六边形)。使用中心和从中心到角点的距离作为构造函数参数。
我用这种方式解决了它(在代码下面)。虽然我对答案有疑问,但无论如何然后去练习13-10,其中说:
定义一个类regular_polygon。使用中心,边数(> 2)以及从中心到角落的距离作为构造函数参数。
当我想到这个解决方案时,我发现利用循环并找到i& s之间的关系。 j非常困难,超过前一个(13-8)。
首先:请问以下代码是你想要的作为练习13-8的解决方案吗?
那么:有没有任何方法与练习13-8(下面的代码)的答案有关,可以用来解决练习13-10吗?
提前致谢。
#include <Simple_window.h>
struct Hexagon : Shape {
Hexagon(Point p, int d): d(d)
{ add(Point(p)); }
void draw_lines() const
{
fl_line(point(0).x-d,point(0).y, point(0).x-d/2,point(0).y-(d-d/20*3),
point(0).x+d/2,point(0).y-(d-d/20*3));
fl_line(point(0).x+d/2,point(0).y-(d-d/20*3), point(0).x+d,point(0).y,
point(0).x+d/2,point(0).y+(d-d/20*3));
fl_line(point(0).x+d/2,point(0).y+(d-d/20*3), point(0).x-d/2,point(0).y+(d-d/20*3),
point(0).x-d, point(0).y);
}
private:
int d;
};
int main() {
using namespace Graph_lib;
Simple_window win(Point(100,100), 600,400, "Hexagon");
Graph_lib::Rectangle r(Point (50,50), 400,200);
Point p(100,100);
int d = 50;
Hexagon h(p,d);
win.attach(h);
win.wait_for_button();
}
问题是如何使用三角法!无论如何,我想到了并写了这个。虽然它适用于方形,但我没有使用任何幻数,但对于其他常规多边形,它不能正常工作。请你看一下吗?
#include <Simple_window.h>
struct Regular_Polygon : Shape {
Regular_Polygon(Point p, int d, int s): d(d), s(s)
{ add(Point(p)); }
void draw_lines() const
{
fl_line(point(0).x-d+(360/s-d),point(0).y-d+(360/s-d), point(0).x+d-(360/s-d),point(0).y-d+(360/s-d));
fl_line(point(0).x+d-(360/s-d),point(0).y-d+(360/s-d), point(0).x+d-(360/s-d),point(0).y+d-(360/s-d));
fl_line(point(0).x+d-(360/s-d),point(0).y+d-(360/s-d), point(0).x-d+(360/s-d),point(0).y+d-(360/s-d));
fl_line(point(0).x-d+(360/s-d),point(0).y+d-(360/s-d), point(0).x-d+(360/s-d),point(0).y-d+(360/s-d));
}
private:
int d, s;
};
int main()
{
using namespace Graph_lib;
Simple_window win(Point(100,100), 600,400, "Regular_Polygon");
Point p(200,200);
int d = 100;
int s = 4;
Regular_Polygon r_p(p,d,s);
win.attach(r_p);
win.wait_for_button();
}
答案 0 :(得分:0)
有很多方法可以改进您的代码:
using
中有一个main()
声明,但也是在那里使用的完全限定名称。Point const c = point(0);
中的draw_lines()
。