當前位置:首頁 » 編程軟體 » 編程畫圈

編程畫圈

發布時間: 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;
}

以上為自己根據實際編程練習和對博文的學習所領悟到的,如果有哪裡理解的不對,還望大家指正,謝謝哈!(代碼沒有問題,可以正常運行。)
註:代碼的排版,我多次修改,並確保整齊,但是一旦我發表後,代碼的排版就會發生改變,有幾行代碼就會變得不規則。

⑻ 編程,中文版如何讓小貓一邊走路一邊,畫圈圈

在編程的過程中,想要實現讓小貓走路就可以通過在坐標中進行一個循環來完成。

熱點內容
中國銀行查詢密碼是什麼 發布:2025-01-16 02:33:20 瀏覽:791
堅果pro錄音文件夾 發布:2025-01-16 02:31:46 瀏覽:938
支付寶的登錄密碼忘記了如何改 發布:2025-01-16 02:30:30 瀏覽:221
解壓作業泥 發布:2025-01-16 02:28:02 瀏覽:806
我的世界rpg伺服器空島 發布:2025-01-16 02:26:49 瀏覽:90
ps腳本函數 發布:2025-01-16 02:15:28 瀏覽:480
android顯示行數據 發布:2025-01-16 02:07:40 瀏覽:963
壓縮皇冠 發布:2025-01-16 01:51:27 瀏覽:274
全鍵盤編程鍵盤 發布:2025-01-16 01:38:59 瀏覽:422
尾貨棉服直播間腳本 發布:2025-01-16 01:21:45 瀏覽:228