当前位置:首页 » 编程软件 » 编程画圈

编程画圈

发布时间: 2022-02-21 05:39:00

⑴ 解释【编程画圆】的原理 尤其关于使用余弦正弦,的作用详细解释。

设定圆心点的坐标(x0,y0)为(200,200)

设定每10ms移动的弧长l=20 弧长l=每10ms移动的弧度n0*半径r

设定圆的半径r=100

Do

n=0

n为从0度开始的转动的弧度

while n<2π n单位为弧度,<2π即<360°未画满一周时

作图点坐标设定为(x,y)

横坐标x=圆心横坐标x0+半径r*cos(n)

纵坐标y=圆心纵坐标y0-半径r*sin(n) 此处y=y0 - r * sin(n),所以此程序沿顺时针转动作圆

移动到坐标点(x,y)

delay 10ms

n=n+l/r,即n=n+n0*r/r n=n+n0 根据l值大小转动n的弧度

wend

loop

⑵ 编程题5.18 两个程序只有画圈的地方不一样 为什么第一个能运行成功 而第二个不能 谢谢

a=1/k之所以错误,因a是整数,结果必然为0,所以a你需要定义成浮点数。另外,为了保证运算的正确,一般我们会写成a=1.0/k,如果直接1/k,很多编译器会把它当成一个整数的除法,结果为0,这肯定不是我们需要的结果

⑶ 数控机床画圆的程序G02,G03的使用

刀具先移动到圆的一个象限点,然后用I和K编程加工圆。
刀具再走到里面的圆的象限点,然后用I和K编程……
如此循环,直到圆心。

⑷ C语言中关于画圆程序

#include<stdio.h>
#include<math.h>
main()
{
double y;
int x,m;
for(y=10;y>=-10;y--) //表示图形的第y行,通过for循环打印所有行
{
m=2.5*sqrt(100-y*y); //用y作为自变量,根据弦长与纵坐标y的函数关系计算出此行上的弦 长的一半也就是两个星形符号之间的距离的一半,并用m表示。
for(x=1;x<50-m;x++) //以50个字符长度为基准根据弦长来确定每行左数第一个星形的位 置,此位置前全印空格
printf(" ");
printf("*");
for(;x<50+m;x++) //以50个字符宽度为基准来确定每行第二个星形的位置
printf(" ");

printf("*\n");
}
}
//此程序打印的只是个大概的圆形,因为运行输出窗口里,相邻的行距和邻字符的列距是不相等的,所以语句 m=2.5*sqrt(100-y*y);中的2.5是用来修正此误差的。可根据具体运行平台适当修改。 如果还看不懂,再问

⑸ 请教:用符号*画圆(VC6编程),怎么编程

说得还不够详细?下面是详细步骤:
1、启动VC6,选择“文件-新建”,弹出“新建”对话框(此时处于“工程”选项卡)。
2、在左边选择“Win32 Application”(倒数第4项),在右边输入工程名,点击“确定”。然后在弹出的对话框中选择“空工程”,再点“完成”。
3、选择“文件-新建”,弹出“新建”对话框(此时处于“文件”选项卡)。
4、在左边选择“C++ Source File”(第4项),在右边输入文件名,点击“确定”。
5、把下面的代码粘贴进去,然后组建、运行。

#include <windows.h>
#include <math.h>

//窗口函数
LRESULT CALLBACK WinMyProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hWnd, &ps);

//画横坐标
MoveToEx(hDC, 50, 300, NULL);
LineTo(hDC, 550, 300);
//画纵坐标
MoveToEx(hDC, 300, 50, NULL);
LineTo(hDC, 300, 550);

//设置绘制背景为透明,防止*号遮挡坐标轴
SetBkMode(hDC, TRANSPARENT);

int x, y, i;
for (i=12; i<=68; i++)
{
x = 100 + i*5;
//画上面1/4圆
y = -(int)(sqrt(40000-(x-300)*(x-300))) + 300;
TextOut(hDC, x, y, "*", strlen("*"));
//画下面1/4圆
y = (int)(sqrt(40000-(x-300)*(x-300))) + 300;
TextOut(hDC, x, y, "*", strlen("*"));
}
for (i=12; i<=68; i++)
{
y = 100 + i*5;
//画左边1/4圆
x = -(int)(sqrt(40000-(y-300)*(y-300))) + 300;
TextOut(hDC, x, y, "*", strlen("*"));
//画右边1/4圆
x = (int)(sqrt(40000-(y-300)*(y-300))) + 300;
TextOut(hDC, x, y, "*", strlen("*"));
}

EndPaint(hWnd, &ps);
break;

case WM_DESTROY:
PostQuitMessage(0);
break;

default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}

//主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
//设计并注册窗口类
WNDCLASS wndcls;
wndcls.cbClsExtra = 0;
wndcls.cbWndExtra = 0;
wndcls.hbrBackground = (HBRUSH)COLOR_WINDOW;
wndcls.hCursor = LoadCursor(NULL, IDC_ARROW);
wndcls.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wndcls.hInstance = hInstance;
wndcls.lpfnWndProc = WinMyProc;
wndcls.lpszClassName = "MyWinClass";
wndcls.lpszMenuName = NULL;
wndcls.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);

//创建窗口
HWND hWnd;
hWnd = CreateWindow("MyWinClass", "在屏幕上画圆", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 600, 600, NULL, NULL, hInstance, NULL);

//显示窗口
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);

//消息循环
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

⑹ 用VB编程画圆

给你一段代码参考吧。

具体的参数,你可以自己修改一下。

上张效果图,代码在后面。

PrivateSubCommand1_Click()
DimiAsLong
Me.Cls
Fori=1To10
Me.Circle(i*600-300,600),300,vbRed
Next
EndSub

PrivateSubCommand2_Click()
DimiAsLong
Me.Cls
Fori=1To10
Me.Circle(750,i*600-300),300,vbRed
Next
EndSub

PrivateSubCommand3_Click()
DimiAsLong,pAsLong
Me.Cls
Fori=1To10
p=i*600-150
Me.Circle(p,p),420,vbRed
Next
EndSub

⑺ MFC编程ellipse()怎么画圆

所谓的动态画线,画矩形,画椭圆的本质就是在于消隐问题的解决以及对Windows消息循环机制的理解,消隐问题:因为MFC中有一个函数SetROP2,通过将该函数的参数设置为R2—NOT(当前绘制的像素值设为屏幕像素值的反色,这里面的“屏幕”二字是指你所绘制的图形所占据的那一部分屏幕区域,即直线所占的屏幕区域就是直线所在的那一段线的区域),利用这一点通过在同一区域重复画两次便可以将该区域的形状消隐。

而Windows消息循环机制更好的体现于MouseMove消息响应中,因为要实现动态画线、画矩形这就体现在鼠标在绘图区的移动上,鼠标在绘图区移动时,产生动态的效果,也就是说在mouse 移动的过程中始终在画线、画矩形,这就要求在MouseMove消息响应中有画线、画矩形的相应函数的调用,但正是因为mouse移动的过程中画了很多的线、矩形,所以我们就要在mouse移动的过程中将之前画出的线、矩形消隐掉,才能保证实现了自己所要实现的功能——动态画线、画矩形,但又没有产生多余的线和矩形。
消隐的问题和动态画图的问题关键在于MouseMove消息响应中的函数调用的顺序:
1.首先将上次所画的图形消隐掉
2.画出临时的图形
3.消息循环的机制:循环执行上述代码(这是Windows循环的机制,不需要自己代码实现)

在最后的LButtonUp消息响应中,需要将上面的MouseMove消息响应中循环的最后一次中最后所画的临时图形消隐掉,之后根据LButtonUp消息响应中point参数画出最终的图形。综上可知:MouseMove中的代码和LButtonUp中消隐临时图形的代码所要实现的功能就是动态这一过程,而图形的最终绘制还在与LButtonUp消息响应及其point参数。
代码如下:
[cpp] view plain
private:
[cpp] view plain
//......
HCURSOR m_HCross;
UINT m_drawType;
CPoint m_OldPoint;
CPoint m_startPoint;
BOOL m_startRect;
[cpp] view plain
CGISView::CGISView()
{
// TODO: add construction code here
//....
m_startRect=FALSE;
m_startPoint=0;
m_OldPoint=0;
m_drawType=0;
//初始化m_HCross为十字光标
m_HCross=AfxGetApp()->LoadStandardCursor(IDC_CROSS);

}
[cpp] view plain
void CGISView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_startRect=TRUE; //鼠标左键单击,设置可以开始绘制矩形框
m_startPoint=point; //记录起始点
m_OldPoint=point;//设置老点也为起始点
//设置光标为十字光标
::SetCursor(m_HCross);

CView::OnLButtonDown(nFlags, point);
}
[cpp] view plain
void CGISView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

CClientDC dc(this); //获取设备句柄
dc.SetROP2(R2_NOT);//此为关键
dc.SetROP2(R2_NOT);//所绘制的图形并没有消失,所以可以验证下面的连续两次颜色取反不是在一次相应中完成
//SetRop2 Specifies the new drawing mode.(MSDN)
//R2_NOT Pixel is the inverse of the screen color.(MSDN)
//即:该函数用来定义绘制的颜色,而该参数则将颜色设置为原屏幕颜色的反色
//这样,如果连续绘制两次的话,就可以恢复原来屏幕的颜色了(如下)
//但是,这里的连续两次绘制却不是在一次消息响应中完成的
//而是在第一次拖动响应的绘制可以显示(也就是看到的),第二次拖动绘制实现擦出(也就看不到了)

dc.SelectStockObject(NULL_BRUSH);//不使用画刷
if(TRUE==m_startRect) //根据是否有单击判断是否可以画矩形
{
switch(m_drawType)
{
case 1://Rectangle

::SetCursor(m_HCross);
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
dc.Rectangle(CRect(m_startPoint,point));
m_OldPoint=point;

break;

case 2: //Line
::SetCursor(m_HCross);
//擦去上一次绘制的临时线
dc.MoveTo(m_startPoint);
dc.LineTo(m_OldPoint);

//绘制这一次的临时线
dc.MoveTo(m_startPoint);
dc.LineTo(point);

//将临时线的终点复制给m_OldPoint,
//使其在消息循环的过程中将该值传递到
//擦去上一次画线的过程中,以便擦去上一次所画的线
m_OldPoint=point;

break;
case 3: //Circle
::SetCursor(m_HCross);
//擦去上一次绘制的临时圆
//设定该圆的y坐标,因为要保证两点的x之差等于y之差
m_OldPoint.y=m_OldPoint.x-m_startPoint.x+m_startPoint.y;
dc.Ellipse(CRect(m_startPoint,m_OldPoint));

//绘制临时圆

point.y=point.x-m_startPoint.x+m_startPoint.y;
dc.Ellipse(CRect(m_startPoint,point));

m_OldPoint=point;
break;
case 4: //Ellipse
::SetCursor(m_HCross);

dc.Ellipse(CRect(m_startPoint,m_OldPoint));
dc.Ellipse(CRect(m_startPoint,point));
m_OldPoint=point;
break;
case 5: //Dot

break;

}
[cpp] view plain
}
[cpp] view plain
}
[cpp] view plain
void CGISView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_startRect=FALSE;//重置绘制矩形框标志
::ClipCursor(NULL);//解锁光标,即将光标恢复为默认光标
//消隐最后的一个矩形
CClientDC dc(this);//获取设备句柄
// dc.SetROP2(R2_NOT); //在MouseMove消息响应中使用过该函数了,所以在这里再一次使用会使得其恢复为屏幕的颜色
dc.SelectStockObject(NULL_BRUSH); //设置画刷为空画刷
switch(m_drawType)
{
case 1: //Retangle

//利用当前画刷绘制矩形,内部由当前空画刷(NULL_BRUSH)填充。
//擦去MouseMove消息响应中的临时矩形
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
//绘制固定矩形
dc.Rectangle(CRect(m_startPoint,point));

//m_drawType=0; //该行的可以使得每画一次都要选择所画的形状
break;

case 2: //Line

//擦去MouseMove消息响应中绘制的最后一次临时线
dc.MoveTo(m_startPoint);
dc.LineTo(m_OldPoint);

//绘制固定线
dc.MoveTo(m_startPoint);
dc.LineTo(point);
break;
case 3: //Circle

dc.Ellipse(CRect(m_startPoint,m_OldPoint));
dc.Ellipse(CRect(m_startPoint,point));
break;
case 4: //Ellipse

dc.Ellipse(CRect(m_startPoint,m_OldPoint));
dc.Ellipse(CRect(m_startPoint,point));
break;
case 5: //Dot
dc.SetPixel(point,RGB(0,0,0));
break;

}
CView::OnLButtonUp(nFlags, point);
}
[cpp] view plain
void CGISView::OnRectangle()
{
// TODO: Add your command handler code here
m_drawType=1;//设置所画的为矩形

}

void CGISView::OnLine()
{
// TODO: Add your command handler code here
m_drawType=2;
}

void CGISView::OnEllipse()
{
// TODO: Add your command handler code here
m_drawType=4;
}

void CGISView::OnDot()
{
// TODO: Add your command handler code here
m_drawType=5;

}

void CGISView::OnCircle()
{
// TODO: Add your command handler code here
m_drawType=3;
}

以上为自己根据实际编程练习和对博文的学习所领悟到的,如果有哪里理解的不对,还望大家指正,谢谢哈!(代码没有问题,可以正常运行。)
注:代码的排版,我多次修改,并确保整齐,但是一旦我发表后,代码的排版就会发生改变,有几行代码就会变得不规则。

⑻ 编程,中文版如何让小猫一边走路一边,画圈圈

在编程的过程中,想要实现让小猫走路就可以通过在坐标中进行一个循环来完成。

热点内容
怎么解压pc版游戏 发布:2025-01-16 00:16:32 浏览:120
v9更新到91有方舟编译器吗 发布:2025-01-16 00:11:49 浏览:499
AB系统编程 发布:2025-01-16 00:09:37 浏览:619
存储过程如何遍历一个表的数据 发布:2025-01-16 00:08:34 浏览:874
apkso反编译 发布:2025-01-15 23:53:20 浏览:5
买的腾讯服务器是装在电脑上吗 发布:2025-01-15 23:25:58 浏览:411
如何查看电脑的配置是不是i5 发布:2025-01-15 23:24:21 浏览:434
PI数据库 发布:2025-01-15 23:14:42 浏览:882
我的世界手机版暖心服务器 发布:2025-01-15 23:05:02 浏览:169
xts压缩比 发布:2025-01-15 23:02:41 浏览:424