【发布时间】:2014-04-26 15:21:17
【问题描述】:
问题说:
定义一个 Arc 类,用于绘制椭圆的一部分。提示:fl_arc().
Ellipse 是预定义的类,它通过一个语句在窗口上绘制一个椭圆,例如,
Ellipse e1(Point(200,200),50,50);fl_arc()是我之前在我的 Windows 机器上安装的 FLTK 的一部分。 由于问题想通过创建一个名为 Arc 的新类绘制椭圆的一部分,我认为我应该使用该名称创建一个新类,并使用 Ellipse 类的定义并对其进行修改这样它就可以根据需要显示椭圆的一部分而不是整个椭圆。这个问题在 Programming Principle and practice using C++ 一书中,我在那本书中找到的关于 Ellipse 类的唯一定义是:
struct Ellipse :Shape {
Ellipse(Point p, int w, int h); //center, max and min distance from center
void draw_lines()const;
Point center()const;
Point focus1()const;
Point focus2()const;
void set_major(int ww) {w=ww;}
int major() const {return w;}
void set_minor(int hh) {h=hh;}
int minor() const {return h;}
private:
int w;
int h;
};
我还在书中发现了一个使用fl_arc() 的案例,用于绘制这样的圆圈:
fl_arc(point(0).x,point(0).y,r+r,r+r,0,360);
这里r是半径。
所以我想,我改变了fl_arc()的参数并写了下面的代码来给我这个问题想要的东西:
#include <Simple_window.h>
struct arc : Shape {
arc(Point p, int w, int h) // center, min, and max distance from center
: w(w), h(h)
{
add(Point(p.x-w,p.y-h));
}
void draw_lines() const {fl_arc(point(0).x,point(0).y,w+w,h+h,0,120);}
Point center() const { return Point(point(0).x+w,point(0).y+h); }
Point focus1() const { return Point(center().x+int(sqrt(double(w*w-h*h))),center().y); }
Point focus2() const { return Point(center().x-int(sqrt(double(w*w-h*h))),center().y); }
void set_major(int ww) { w=ww; }
int major() const { return w; }
void set_minor(int hh) { h=hh; }
int minor() const { return h; }
private:
int w;
int h;
};
int main()
{
using namespace Graph_lib;
Point t(100,100);
Simple_window win(t,600,400, "semi-ellipse");
arc a(Point(200,200),150,50);
a.draw_lines();
win.wait_for_button();
}
幸运的是,代码运行成功,但没有显示椭圆的任何部分。
问题:
有人知道为什么吗?
PS:如果我们能找到修改类的方法,我们可以告诉新类为我们做一些新的工作。
【问题讨论】:
-
感谢您的意见。但是直到现在我还没有在这本书中学习过关于虚拟的知识,我也不知道,所以作者应该如何让我解决你的一个如此复杂的问题!?