最终效果:
//绘制一个300x200像素大小的椭圆,然后以圆心为原点,绘制长度分别为400和300像素的x轴和y轴。
//标记椭圆的两个焦点;标记椭圆边上不在坐标轴上的一个点,并绘制连接焦点到该点的两条线。
#include"../实践/GUI/Simple_window.h"
#include"GUI/Graph.h"
int main()
try
{
using namespace Graph_lib;
//创建一个1000x800大小的Simple_window。
Simple_window win(Point(100,100), 1000,800 , "My_Window");
//------------------------------------------------------------------------------------------
//绘制一个300x200像素大小的椭圆。
Graph_lib::Ellipse ee(Point(500, 400), 150, 100);
ee.set_color(0);
win.attach(ee);
//------------------------------------------------------------------------------------------
//以椭圆圆心为原点,绘制长度分别为400和300像素的x轴和y轴。
Axis ax(Axis::x,Point(300, 400), 400,10,"x axis");
ax.set_color(0);
win.attach(ax);
Axis ay(Axis::y, Point(500, 550), 300, 10, "y axis");
ay.set_color(0);
win.attach(ay);
//------------------------------------------------------------------------------------------
//标记椭圆的两个焦点。
Circle f1(ee.focus1(), 5);
f1.set_fill_color(Color::red);
win.attach(f1);
Text ff1(Point(ee.focus1().x-10, ee.focus1().y + 20), "F1");
ff1.set_color(Color::red);
win.attach(ff1);
Circle f2(ee.focus2(), 5);
f2.set_fill_color(Color::red);
win.attach(f2);
Text ff2(Point(ee.focus2().x - 10, ee.focus2().y + 20), "F2");
ff2.set_color(Color::red);
win.attach(ff2);
//------------------------------------------------------------------------------------------
// 标记椭圆边上不在坐标轴上的一个点.
Circle p(Point(600,400-sqrt(100*100-(100*100*100*100)/(150*150))), 5);
p.set_fill_color(Color::blue);
win.attach(p);
Text pp(Point(p.center().x, p.center().y -10), "P");
pp.set_color(Color::blue);
win.attach(pp);
//------------------------------------------------------------------------------------------
// 绘制连接焦点到该点的两条线.
Line l1(p.center(), f1.center());
l1.set_color(Color::green);
win.attach(l1);
Line l2(p.center(), f2.center());
l2.set_color(Color::green);
win.attach(l2);
//将控制权交给显示引擎,使GUI系统在屏幕上显示一个对象,并等待用户按下窗口中的“Next”,以便执行下面的程序。
win.wait_for_button();
//------------------------------------------------------------------------------------------
}
catch (exception& e) {
cerr << "error: " << e.what() << '\n';
return 1;
}
catch (...) {
cerr << "Oops: unknown exception!\n";
return 2;
};
//---------------------------------------------------------------------------------------------