用c语言如何画ns图

2026-06-11 02:24:38

#include

#include

// 初始化SDL

int init(SDL_Window window, SDL_Renderer renderer) {

if (SDL_Init(SDL_INIT_VIDEO) < 0) {

printf("SDL could not initialize! SDL_Error: %sn", SDL_GetError());

return 0;

}

*window = SDL_CreateWindow("NS Diagram", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, SDL_WINDOW_SHOWN);

if (*window == NULL) {

printf("Window could not be created! SDL_Error: %sn", SDL_GetError());

return 0;

}

*renderer = SDL_CreateRenderer(*window, -1, SDL_RENDERER_ACCELERATED);

if (*renderer == NULL) {

printf("Renderer could not be created! SDL_Error: %sn", SDL_GetError());

SDL_DestroyWindow(*window);

return 0;

}

return 1;

}

// 绘制椭圆

void drawEllipse(SDL_Renderer *renderer, int x, int y, int rx, int ry) {

for (int w = 0; w < rx * 2; w++) {

for (int h = 0; h < ry * 2; h++) {

int dx = rx - w; // horizontal offset

int dy = ry - h; // vertical offset

if ((dx*dx + dy*dy) <= (rx * rx)) {

SDL_RenderDrawPoint(renderer, x + dx, y + dy);

SDL_RenderDrawPoint(renderer, x - dx, y + dy);

SDL_RenderDrawPoint(renderer, x + dx, y - dy);

SDL_RenderDrawPoint(renderer, x - dx, y - dy);

}

}

}

}

// 绘制矩形

void drawRectangle(SDL_Renderer *renderer, int x, int y, int w, int h) {

SDL_Rect rect = {x, y, w, h};

SDL_RenderDrawRect(renderer, &rect);

}

// 绘制菱形

void drawDiamond(SDL_Renderer *renderer, int x, int y, int w, int h) {

SDL_RenderDrawLine(renderer, x, y - h/2, x + w/2, y);

SDL_RenderDrawLine(renderer, x + w/2, y, x, y + h/2);

SDL_RenderDrawLine(renderer, x, y + h/2, x - w/2, y);

SDL_RenderDrawLine(renderer, x - w/2, y, x, y - h/2);

}

// 绘制连接线

void drawLine(SDL_Renderer *renderer, int x1, int y1, int x2, int y2) {

SDL_RenderDrawLine(renderer, x1, y1, x2, y2);

}

// 主函数

int main(int argc, char* args[]) {

SDL_Window *window = NULL;

SDL_Renderer *renderer = NULL;

if (!init(&window, &renderer)) {

return -1;

}

SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);

SDL_RenderClear(renderer);

SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);

// 绘制起始符

drawEllipse(renderer, 400, 100, 50, 30);

// 绘制处理过程

drawRectangle(renderer, 350, 200, 100, 50);

// 绘制决策

drawDiamond(renderer, 400, 350, 100, 50);

// 绘制连接线

drawLine(renderer, 400, 130, 400, 200); // 起始符到处理过程

drawLine(renderer, 400, 250, 400, 325); // 处理过程到决策

SDL_RenderPresent(renderer);

SDL_Delay(5000);

SDL_DestroyRenderer(renderer);

SDL_DestroyWindow(window);

SDL_Quit();

return 0;

}

RSS 订阅源地址收集整理合集
唱响青春之歌!2024校歌会揭晓十大原创校园歌曲