Рисование круга в C ++ с использованием FLTK и некоторая странность между книгой (PPP) и результатом работы системы

В ппс (http://www.stroustrup.com/programming1.htmlВ книге Страуструпа сказано следующее о Круге:

«Главная особенность реализации круга состоит в том, что сохраненная точка — это не центр, а верхний левый угол квадрата, ограничивающего круг.«

И это определения и реализации из книги:

 struct Circle : Shape {

Circle(Point p, int rr) // center and radius
:r(rr) { add(Point(p.x-r,p.y-r)); }

void draw_lines() const {
if(color.visibility())
fl_arc(point(0).x, point(0).y,r+r,r+r,0,360);
}

Point center() const {
return Point(point(0).x+r,point(0).y+r);
}

int radius() const { return r; }
void set_radius(int rr) { r=rr;}
private:
int r;
};

Таким образом, точка, которую мы даем программе, — это верхний левый угол (квадрата, ограничивающего круг), а не центр круга.
Пожалуйста, посмотрите на этот простой код:

    #include <Simple_window.h>

int main()
{
using namespace std;

Simple_window win(Point(100,100), 600, 400, "test2");
Point t(200,200);
Mark m(t,'x');
Circle c(t,100);
win.attach(c);
win.attach(m);
win.wait_for_button();
}

Как вы видите, я сначала дал окно точку (здесь T) и использовал эту точку, чтобы использовать ее для формы круга, но если вы запустите этот код (у меня нет такой репутации, чтобы загрузить его изображение!), вы можете видеть, что точку, которую я дал ему ( T) это не верхний левый угол, это просто центр круга, вопреки его высказыванию! В чем проблема, пожалуйста?

-1

Решение

Там нет ничего плохого с кодом или описанием.

«Главная особенность реализации круга состоит в том, что точка сохранена это не центр, а верхний левый угол квадрата, ограничивающего круг. «

Обратите внимание на фразу «сохраненная точка» — это говорит о значении, которое запоминает класс, а не о значении, используемом для создания класса. Вы создаете класс, используя центр и радиус, и класс обрабатывает эти значения в своем конструкторе и сохраняет верхний левый угол и радиус, как можно увидеть здесь:

Circle(Point p, int rr) // center and radius
:r(rr)
{
add (Point (p.x-r, p.y-r)); // point is converted from centre to top left
}
2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector