Vẽ đường tròn nét đặc C++

Làm thế nào để vẽ được đường tròn với nét đặc nhỉ?
Như hình bên dưới mình vẽ bằng cách này:

void MyRenderer::drawCircle(Circle circle)
{
    for (int angle = 0; angle < 360; angle++) {
        int x = circle.getMidPoint().getX() + circle.getRadius() * cos(angle);
        int y = circle.getMidPoint().getY() + circle.getRadius() * sin(angle);

        SDL_RenderDrawPoint(renderer, x, y);
    }
}

thì khi bán kính càng lớn, nét vẽ lại càng rời rạc hơn.

do chỉ vẽ có 360 điểm, nên khoảng cách giữa mỗi điểm là (chu vi) / 360. Bán kính càng lớn thì chu vi càng lớn, khoảng cách này càng lớn nên thấy khoảng trắng giữa các điểm thôi.

xài SDL_RenderDrawLines mà vẽ 359 đường thẳng nối 360 điểm. Nhớ nối điểm đầu và điểm cuối nữa bằng SDL_RenderDrawLine.

xài SDL2_gfx mà vẽ hình tròn đi. Doc ở đây. Ngoài vẽ circle bình thường còn có cho vẽ anti-alias circle, có cho vẽ hình tròn đặc, nếu muốn tròn đặc anti-alias thì vẽ thêm cái aaCircle đè lên…

Còn ko thì vẽ hình tròn trong mấy chương trình khác rồi lưu lại png, vẽ cái hình .png cho dễ :sweat_smile:

source vẽ hình tròn của nó: (nó vẽ ellipse với rx = ry). Đọc chả hiểu gì :joy:

2 Likes

A post was merged into an existing topic: Topic này chứa các post được cho là Off-topic

Sử dụng thuật toán loang hoặc đệ quy.

Bắt đầu từ 1 điểm bất kỳ nằm trên đường tròn rồi sẽ lan ra các điểm khác.
Đường tròn dù to đến mấy vẫn là đặc.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?