Загрузка...

Не рисуется Окружность

Тема в разделе C/C++ создана пользователем egorikkfn 14 май 2024. 141 просмотр

Загрузка...
  1. egorikkfn
    egorikkfn Автор темы 14 май 2024 люблю/ненавижу вышмат 114 4 дек 2021
    Всем привет,делаю работу по выводу фигур в консоли на C++
    Трапецию нарисовал(думал что она труднее чем окружность)
    но окружность с моими параметрами не выводится(я думаю дело в моем конструкторе Circle.Хз даже,потому что если захардкодить(поставить интовые значения вместо задаваемых параметров) то все норм выводится
    Figure.h
    C
    #pragma once
    #include <iostream>
    #include <windows.h>
    #include<windowsx.h>
    using namespace std;

    const int NotUsed = system("color F0");// цвет фона окна
    class Figure {// базовый класс
    public:

    Figure() : x0(0), y0(0), R(0){};
    Figure(int _x0, int _y0, int _R, COLORREF _background, COLORREF _border) :
    x0(_x0), y0(_y0), R(_R), background(_background), border(_border) {
    hwnd = GetConsoleWindow();
    hdc = GetDC(hwnd);
    GetClientRect(hwnd, &rt);
    }
    virtual void show();
    virtual void hide();
    virtual void move(int, int);
    ~Figure() { ReleaseDC(hwnd, hdc); };
    protected:
    int x0, y0;
    int R;
    HWND hwnd;
    HDC hdc;
    RECT rt;
    COLORREF background;
    COLORREF border;

    };
    Figure.cpp

    C
    #include"Figure.h"
    void Figure::show() {}
    void Figure::hide() {}
    void Figure::move(int, int) {}
    Circle.h

    C
    #include "Figure.h"

    class Circle :public Figure {
    private:
    int x0, y0;
    int R;
    public:
    Circle(int new_x0, int new_y0, int new_R, COLORREF new_bkgrnd, COLORREF new_border) :
    Figure(new_x0, new_y0, new_R, new_bkgrnd, new_border) {};
    void show() override;
    };


    Circle.cpp

    C
    #include "Figure.h"
    #include "Circle.h"
    void Circle::show() {
    HPEN pen = CreatePen(PS_SOLID, 2,border);
    HBRUSH brush = CreateSolidBrush(background);
    SelectObject(hdc, pen);
    SelectObject(hdc, brush);
    Ellipse(hdc,x0-R,y0+R,x0+R,y0-R);
    DeleteObject(pen);
    DeleteObject(brush);
    DeletePen(pen);
    DeleteBrush(brush);
    ReleaseDC(hwnd, hdc);
    }
    main.cpp

    C
    #include "Figure.h"
    #include "Trapezium.h"
    #include "Circle.h"
    #include "Dyn.h"
    int main() {
    SetConsoleTitle((LPCWSTR)L"23VP2_2");
    Dyn d1{ new Circle(100,100,400,RGB(0,89,24),RGB(65,0,8))};
    d1.show();
    Sleep(3600);
    return 0;
    }
     
  2. egorikkfn
    egorikkfn Автор темы 14 май 2024 люблю/ненавижу вышмат 114 4 дек 2021
    я сижу ,знаю что проблема в конструкторе Circle,но хз че сделать
     
  3. God_likeGL
    God_likeGL Layer 1 14 май 2024 ЛУЧШИЕ ВЕРИФИКАЦИИ - lolz.live/threads/4228395/ :+rep: 27 744 30 окт 2018
    1. ChatGPT
      God_likeGL, проблема, с которой столкнулся egorikkfn, может быть связана с тем, что в классе `Circle` он повторно объявил переменные `x0`, `y0` и `R`, которые уже были объявлены в базовом классе `Figure`. Это приводит к тому, что в методе `show()` класса `Circle` используются неинициализированные локальные переменные `x0`, `y0` и `R`, а не те, которые передаются в конструктор `Figure`.

      Чтобы исправить эту ошибку, egorikkfn должен удалить объявления переменных `x0`, `y0` и `R` из класса `Circle`, так как они уже наследуются от класса `Figure`. Вот исправленная версия заголовочного файла `Circle.h`:

      C

      #include "Figure.h"

      class Circle : public Figure {
      public:
      Circle(int new_x0, int new_y0, int new_R, COLORREF new_bkgrnd, COLORREF new_border) :
      Figure(new_x0, new_y0, new_R, new_bkgrnd, new_border) {};
      void show() override;
      };
      Также стоит убедиться, что метод `show()` в классе `Circle` корректно рисует окружность. В текущей реализации есть небольшая ошибка в вызове функции `Ellipse()`. Параметры должны быть переданы так, чтобы они правильно задавали координаты левого верхнего и правого нижнего углов прямоугольника, в который вписана окружность:

      C

      void Circle::show() {
      HPEN pen = CreatePen(PS_SOLID, 2, border);
      HBRUSH brush = CreateSolidBrush(background);
      SelectObject(hdc, pen);
      SelectObject(hdc, brush);
      Ellipse(hdc, x0 - R, y0 - R, x0 + R, y0 + R);
      DeleteObject(pen);
      DeleteObject(brush);
      }
      Эти изменения должны помочь egorikkfn корректно отобразить окружность в консоли.
    2. egorikkfn Автор темы
      God_likeGL, ,я внатуре думал что он не поможет и даже не спрашивал,но он мне подсказал,спасибо бро!
  4. egorikkfn
    egorikkfn Автор темы 14 май 2024 люблю/ненавижу вышмат 114 4 дек 2021
    "Dyn.h" это динамический массив ,там все хорошо,тк трапецию он выводит
    --- Сообщение объединено с предыдущим 14 май 2024
    бля это я ебанат,у меня члены класса с одинаковыми именами наследовались от Figure.
     
Top