gpt4 book ai didi

c++ - 如何在C++中画一个带星星的圆圈?

转载 作者:太空狗 更新时间:2023-10-29 21:15:06 25 4
gpt4 key购买 nike

我是 C++ 新手,正在做一道练习题。我做了什么:

for (int i = 0; i < 2 * r; i++) {
for (int j = 0; j < 2 * r; j++) {
if (i == sqrt((static_cast<int> (r))^2 - j^2)) {
cout << "*";
} else {
cout << " ";
}
}
cout << endl;
}

然而,它并没有吸引我任何东西。 :(

最佳答案

enter image description here

下面的代码是一种绘制圆的简单方法,无需使用花哨的函数跳转到任意选择的 x 或 y 位置。

#include <iostream>
#include <math.h>

using namespace std;

int pth (int x,int y) {
return sqrt (pow(x,2)+pow(y,2));
}

int main ( ) {

int c=0;
int r=10;

const int width=r;
const int length=r*1.5;

for (int y=width;y >= -width;y-=2) {
for (int x=-length;x <= length;x++) {

if ((int) pth(x,y)==r) cout << "*";
else cout << " ";

}
cout << "\n";
}
cin.get();

return 0;
}

如果您想要更高级的代码并且您使用的是 Windows 平台并且您使用 Visual Studio 创建程序,那么下面的代码将会很有趣。

它使用像 SetConsoleCursorPosition() 这样的函数来设置 xy 位置,使用 SetConsoleTextAttribute() 来设置颜色。代码在控制台文本窗口中绘制线、像素、矩形和圆。

enter image description here

#include<stdio.h>
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <windows.h>

using namespace std;

void gotoxy(int x, int y);
void setcolor(WORD color);
void setForeGroundAndBackGroundColor(int ForeGroundColor,int BackGroundColor);
void clearscreen();
void drawpixel( unsigned char x, unsigned char y, unsigned char Color);
void drawpixel2( unsigned char x, unsigned char y, unsigned char Color, char character);
void drawcircle(int x, int y, int a, int b, int color);
void drawline(int x0, int y0, int x1, int y1, int color);
void drawfilledrectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,unsigned char bkcol);
void drawframe(unsigned x,unsigned y,unsigned sx,unsigned sy,unsigned char col,unsigned char col2,char text_[]);
void drawwindow(unsigned x,unsigned y,unsigned sx,unsigned sy,unsigned char col,unsigned char col2,unsigned char bkcol,char text_[]);
void drawcolorpalette();



int main(void){

setcolor(15);
clearscreen();
drawwindow(3,2,77,15,31,31,31,"a window is drawn");

int X = 40;
int Y = 12;
int rad = 8;
int col = 15;
double deg = 0;

// draw a circle using sin( ) and cos( )
do {
X = (int) (rad * cos(deg));
Y = (int) (rad * sin(deg));
drawpixel2 (40+X, 12+Y, col, '*' );
deg += 0.005;
} while (deg <= 6.4);




drawcircle(60, 10, 8, 8, 15);

drawline(1,1,77,22,15);

gotoxy(40,4);
cout<<"Another circle is drawn.";


gotoxy(60,22);
cout<<"A Line is drawn.";

gotoxy(20,13);
cout<<"A circle is drawn.";



setcolor(7);
gotoxy(1,23);
cin.ignore();
cin.get();

return 0;
}


//*****************************************************************************

void gotoxy(int x, int y){
COORD coord;
coord.X = x; coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
return;
}

//*****************************************************************************

void setcolor(WORD color){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);
return;
}


//
// colors:
// 0 = Black
// 1 = Blue
// 2 = Green
// 3 = Cyan
// 4 = Red
// 5 = Magenta
// 6 = Yellow
// 7 = LightGray
// 8 = DarkGray
// 9 = LightBlue
// 10 = LightGreen
// 11 = LightCyan
// 12 = LightRed
// 13 = LightMagenta
// 14 = LightYellow
// 15 = White


//

//*****************************************************************************

void setForeGroundAndBackGroundColor(int ForeGroundColor,int BackGroundColor){
int color=16*BackGroundColor+ForeGroundColor;
setcolor(color);
}

//*****************************************************************************

void clearscreen(){
COORD coordScreen = { 0, 0 };
DWORD cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD dwConSize;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

GetConsoleScreenBufferInfo(hConsole, &csbi);
dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
GetConsoleScreenBufferInfo(hConsole, &csbi);
FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
SetConsoleCursorPosition(hConsole, coordScreen);
return;
}

//*****************************************************************************

void drawpixel( unsigned char x, unsigned char y, unsigned char Color){
setcolor(Color);
gotoxy(x,y);printf("Û");
}

//*****************************************************************************

void drawpixel2( unsigned char x, unsigned char y, unsigned char Color, char character){
setcolor(Color);
gotoxy(x,y);printf("%c",character);
}

//*****************************************************************************

void drawcircle(int x, int y, int a, int b, int color){
int wx, wy;
int thresh;
int asq = a * a;
int bsq = b * b;
int xa, ya;

drawpixel(x, y+b, color);
drawpixel(x, y-b, color);

wx = 0;
wy = b;
xa = 0;
ya = asq * 2 * b;
thresh = asq / 4 - asq * b;

for (;;) {
thresh += xa + bsq;

if (thresh >= 0) {
ya -= asq * 2;
thresh -= ya;
wy--;
}

xa += bsq * 2;
wx++;

if (xa >= ya)
break;


drawpixel(x+wx, y-wy, color);
drawpixel(x-wx, y-wy, color);
drawpixel(x+wx, y+wy, color);
drawpixel(x-wx, y+wy, color);
}

drawpixel(x+a, y, color);
drawpixel(x-a, y, color);

wx = a;
wy = 0;
xa = bsq * 2 * a;

ya = 0;
thresh = bsq / 4 - bsq * a;

for (;;) {
thresh += ya + asq;

if (thresh >= 0) {
xa -= bsq * 2;
thresh = thresh - xa;
wx--;
}

ya += asq * 2;
wy++;

if (ya > xa)
break;

drawpixel(x+wx, y-wy, color);
drawpixel(x-wx, y-wy, color);
drawpixel(x+wx, y+wy, color);
drawpixel(x-wx, y+wy, color);
}
}

//*****************************************************************************

void drawline(int x0, int y0, int x1, int y1, int color){
int pix = color;
int dy = y1 - y0;
int dx = x1 - x0;
int stepx, stepy;

if (dy < 0) { dy = -dy; stepy = -1; } else { stepy = 1; }
if (dx < 0) { dx = -dx; stepx = -1; } else { stepx = 1; }
dy <<= 1; // dy is now 2*dy
dx <<= 1; // dx is now 2*dx

drawpixel( x0, y0,pix);
if (dx > dy) {
int fraction = dy - (dx >> 1); // same as 2*dy - dx
while (x0 != x1) {
if (fraction >= 0) {
y0 += stepy;
fraction -= dx; // same as fraction -= 2*dx
}
x0 += stepx;
fraction += dy; // same as fraction -= 2*dy
drawpixel( x0, y0,pix);
}
} else {
int fraction = dx - (dy >> 1);
while (y0 != y1) {
if (fraction >= 0) {
x0 += stepx;
fraction -= dy;
}
y0 += stepy;
fraction += dx;
drawpixel( x0, y0,pix);
}
}
}

//*****************************************************************************


void drawframe(unsigned x,unsigned y,unsigned sx,unsigned sy,unsigned char col,unsigned char col2,char text_[])
{
unsigned i,j,m;
{

m=(sx-x); //differential
j=m/8; //adjust
j=j-1; //more adjustment
gotoxy(x,y);printf("É"); //Top left corner of box
gotoxy(sx,y);printf("»"); //Top right corner of box
gotoxy(x,sy);printf("È"); //Bottom left corner of box
gotoxy(sx,sy);printf("¼"); //Bottom right corner of box

for (i=x+1;i<sx;i++)
{
gotoxy(i,y);printf("Í"); // Top horizontol line
gotoxy(i,sy);printf("Í"); // Bottom Horizontal line
}

for (i=y+1;i<sy;i++)
{
gotoxy(x,i);printf("º"); //Left Vertical line
gotoxy(sx,i);printf("º"); //Right Vertical Line
}

gotoxy(x+j,y);printf(text_); //put Title
gotoxy(1,24);
}
}

//*****************************************************************************

void drawfilledrectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,unsigned char bkcol)
{
int x,y;
setcolor(bkcol); //Set to color bkcol

for (y=y1;y<y2;y++) //Fill Y Region Loop
{
for (x=x1;x<x2;x++) //Fill X region Loop
{
gotoxy(x,y);printf(" "); //Draw Solid space
}
}
}

//*****************************************************************************

void drawwindow(unsigned x,unsigned y,unsigned sx,unsigned sy,
unsigned char col, unsigned char col2,unsigned char bkcol,char text_[])
{
drawfilledrectangle(x,y,sx,sy,bkcol);
drawframe(x,y,sx,sy,col,col2,text_);
}

void drawcolorpalette()
{
for (int i=0;i<16;i++)
{
for (int j=0;j<16;j++)
{
setForeGroundAndBackGroundColor(i,j);
gotoxy(i*4,j);printf("%d",(i*j)+1);


}

}

}

关于c++ - 如何在C++中画一个带星星的圆圈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38843226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com