當前位置:首頁 » 編程軟體 » 旋轉圖形編程

旋轉圖形編程

發布時間: 2022-11-01 23:10:50

① fanuc系統g17平面z方向旋轉怎麼編程 z方向有個31度的圓弧面,沒有萬能銑頭的情況下怎麼編

G68XYR,該指令可使編程圖形按照指定旋轉中心及旋轉方向旋轉一定的角度,G68表示開始坐標系旋轉,G69用於撤消旋轉功能。1、基本編程方法編程格式:G68X~Y~R~G69式中:X、Y――旋轉中心的坐標值(可以是X、Y、Z中的任意兩個,它們由當前平面選擇指令G17、G18、G19中的一個確定)。當X、Y省略時,G68指令認為當前的位置即為旋轉中心。R--旋轉角度,逆時針旋轉定義為正方向,順時針旋轉定義為負方向。

② 求c語言高手賜一個關於圖像旋轉的程序,謝謝!!

原型:
int WINAPI icePub_imgCircumgyrate(char *strImgFilename,char *strBmpFilename,int radian)
輸入:strImgFilename 待處理圖像文件名
strBmpFilename 結果bmp文件名
radian 旋轉角度
輸出:

typedef int (WINAPI ICEPUB_IMGCIRCUMGYRATE)(char *strImgFilename,char *strBmpFilename,int radian);
ICEPUB_IMGCIRCUMGYRATE *icePub_imgCircumgyrate = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_imgCircumgyrate=(ICEPUB_IMGCIRCUMGYRATE *)GetProcAddress(hDLLDrv,"icePub_imgCircumgyrate");
}
if(icePub_imgCircumgyrate)
{
icePub_imgCircumgyrate("a.jpg","a1.bmp",45);
icePub_imgCircumgyrate("d.png", "d1.bmp",120);
}
if(hDLLDrv)
FreeLibrary(hDLLDrv);

③ 怎麼用vb實現圖形的旋轉

啟動vb6建立一個標准exe工程,首先添加兩個圖片框(picture1和picture2),添加三個命令按鈕command1(caption=「正常顯示」)、command2(caption=「180度倒立」)、command3(caption=「45度旋轉」),雙擊窗體,寫入以下代碼:
PrivateConstSRCCOPY=&HCC0020
PrivateConstPi=3.14

"gdi32"(ByValhdcAsLong, ByValxAsLong,ByValyAsLong,ByValcrColorAsLong)AsLong
"gdi32"(ByValhdcAsLong, ByValxAsLong,ByValyAsLong)AsLong

"gdi32"(ByValhdcAsLong, ByValxAsLong,ByValyAsLong,ByValnWidthAsLong,ByValnHeightAsLong, ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValnSrcWidth AsLong,ByValnSrcHeightAsLong,ByValdwRopAsLong)AsLong

privateSubbmp_rotate(pic1AsPictureBox,pic2AsPictureBox,ByValtheta)『45度旋轉
Dimc1xAsInteger,c1yAsInteger
Dimc2xAsInteger,c2yAsInteger
DimaAsSingle
Dimp1xAsInteger,p1yAsInteger
Dimp2xAsInteger,p2yAsInteger
DimnAsInteger,rAsInteger

c1x=pic1.ScaleWidth\2
c1y=pic1.ScaleHeight\2
c2x=pic2.ScaleWidth\2
c2y=pic2.ScaleHeight\2
Ifc2x$#@60;c2yThenn=c2yElsen=c2x
n=n-1
pic1hDC=pic1.hdc
pic2hDC=pic2.hdc
Forp2x=0Ton
Forp2y=0Ton
Ifp2x=0Thena=Pi/2Elsea=Atn(p2y/p2x)
r=Sqr(1&*p2x*p2x+1&*p2y*p2y)
p1x=r*Cos(a+theta)
p1y=r*Sin(a+theta)
c0&=GetPixel(pic1hDC,c1x+p1x,c1y+p1y)
c1&=GetPixel(pic1hDC,c1x-p1x,c1y-p1y)
c2&=GetPixel(pic1hDC,c1x+p1y,c1y-p1x)
c3&=GetPixel(pic1hDC,c1x-p1y,c1y+p1x)
Ifc0&$#@60;$#@62;-1ThenSetPixelpic2hDC,c2x+p2x,c2y+p2y,c0
Ifc1&$#@60;$#@62;-1ThenSetPixelpic2hDC,c2x-p2x,c2y-p2y,c1
Ifc2&$#@60;$#@62;-1ThenSetPi pic2hDC,c2x+p2y,c2y-p2x,c2
Ifc3&$#@60;$#@62;-1ThenSetPixelpic2hDC,c2x-p2y,c2y+p2x,c3
Next
Next
EndSub

PrivateSubCommand1_Click()『正常復制
Picture2.Cls
px=Picture1.ScaleWidth
py=Picture1.ScaleHeight
StretchBltPicture2.hdc,px,0,-px,py,Picture1.hdc,0,0,px,py,SRCCOPY
EndSub

PrivateSubCommand2_Click()『180度倒立
Picture2.Cls
px=Picture1.ScaleWidth
py=Picture1.ScaleHeight
StretchBltPicture2.hdc,0,py,px,-py,Picture1.hdc,0,0,px,py,SRCCOPY
EndSub

PrivateSubCommand3_Click()『45旋轉
Picture2.Cls
Callbmp_rotate(Picture1,Picture2,3.14/4)
EndSub

PrivateSubForm_Load()
OnErrorResumeNext
Me.Caption=App.Title"添加應用程序標題
Me.Left=(Screen.Width-Me.Width)/2
Me.Top=(Screen.Height-Me.Height)/2"窗體具中
Picture1.ScaleMode=3
Picture2.ScaleMode=3
EndSub

④ MATLAB,編寫程序,將一個圖像旋轉45度(急!)

您好,如果按照你的程序的話,根據提示內容,在計算
i1=round(i*cos(a) - j*sin(a)+ n * sin(a))+1;
j1=round(i*sin(a) + j*cos(a));

這兩個時會出現零值,那麼,在MATLAB中索引F矩陣就是錯誤的了,你可以設置斷點,然後單步運行一下看看在哪一步出現的零值,你根據旋轉矩陣的計算應該是沒有問題的,關鍵是灰度映射時可能出現零位置,最好在其中加入判斷的語句,j1計算會出現0值。

你這樣寫,是沿坐標軸原點旋轉,你說的我原來寫的那個是沿固定點旋轉,實現都是使用旋轉矩陣,沿固定點只是先平移到原點,然後再平移回去,你可以看看,具體的我已經記不太清楚了,呵呵,已經不做圖像了。

我寫的那個的程序:

function im_final = imrotate_my(im_path,theta,options)
% IM_ROTATE 兩維圖像旋轉以及雙線性灰度插值演算法的實現
% im_path 圖像存儲路徑
% theta 旋轉角度,正數表示順時針旋轉
% options 可以為circular(超出范圍部分,按照周期形式擴展)
% crop(超出部分置零,即全黑)
% Ref. 章毓晉. 圖像工程(上冊)——圖像處理. 清華大學出版社
% Author: lskyp Date: 2009.08.12
% Version: V1.2 Original Version: V1.0 im_bilinear.m;im_rotate.m
% with the parameter options added

error(nargchk(2,3,nargin,'string'))

if nargin == 2
options = 'circular';
else
if ~ (strcmp(options,'circular') || strcmp(options,'crop'))
error('錯誤的輸出方法')
end
end

im_init = imread(im_path);
im_init = double(im_init);
im_height = size(im_init,1);
im_width = size(im_init,2);
% 分別處理灰度圖像和RGB圖像
if ndims(im_init) == 3
im_final = zeros(im_height,im_width,3);
R = im_init(:,:,1);
G = im_init(:,:,2);
B = im_init(:,:,3);
R_final = im_final(:,:,1);
G_final = im_final(:,:,2);
B_final = im_final(:,:,3);
else
im_final = zeros(im_height,im_width);
end

rot_matrix = [cos(theta) -sin(theta);sin(theta) cos(theta)];
orig_h = (im_height + 1)/2;
orig_w = (im_width + 1)/2;
for h = 1:im_height
for w = 1:im_width
% 平移至原點,旋轉,然後再平移回去
new_position = rot_matrix*[h - orig_h;w - orig_w] + [orig_h;orig_w];

% 超出范圍按周期擴展控制,options參數控制
if strcmp(options,'circular')
new_position(1) = mod(new_position(1),im_height);
new_position(2) = mod(new_position(2),im_width);
if new_position(1) == 0
new_position(1) = im_height;
end
if new_position(2) == 0
new_position(2) = im_width;
end
end

% 如果新位置為整數,那麼直接賦予灰度值或者RGB值,否則,按照雙線性插值計算。
% 使用後向映射
if new_position == round(new_position)
if new_position(1) == 0
new_position(1) = 1;
end
if new_position(2) == 0
new_position(2) = 1;
end
% 超出范圍控制,options為crop選項,超出范圍置零
if strcmp(options,'crop') && (new_position(1) >= im_height || ...
new_position(2) >= im_width || new_position(1) < 0 || ...
new_position(2) < 0)
if ndims(im_init) == 3
R_final(h,w) = 0;
G_final(h,w) = 0;
B_final(h,w) = 0;
else
im_final(h,w) = 0;
end
else
if ndims(im_init) == 3
R_final(h,w) = R(new_position(1),new_position(2));
G_final(h,w) = G(new_position(1),new_position(2));
B_final(h,w) = B(new_position(1),new_position(2));
else
im_final(h,w) = im_init(new_position(1),new_position(2));
end
end
else
h_new = floor(new_position(1));
w_new = floor(new_position(2));
if h_new == 0
h_new = 1;
end
if w_new == 0
w_new = 1;
end

% 超出范圍控制,options為crop選項,超出范圍置零
if strcmp(options,'crop') && (h_new >= im_height || ...
w_new >= im_width || h_new < 0 || ...
w_new < 0)
if ndims(im_init) == 3
R_final(h,w) = 0;
G_final(h,w) = 0;
B_final(h,w) = 0;
else
im_final(h,w) = 0;
end
else
% 邊界控制
h1 = h_new + 1;
w1 = w_new + 1;
if h1 >= im_height + 1
h1 = mod(h1,im_height);
end
if w1 >= im_width + 1
w1 = mod(w1,im_width);
end
if ndims(im_init) == 3
% 雙線性插值的實現過程
% Ref. 章毓晉. 圖像工程(上冊)——圖像處理. 清華大學出版社
R_temp1 = R(h1,w_new)*(new_position(1) - h_new) + ...
R(h_new,w_new)*(h_new + 1 - new_position(1));
R_temp2 = R(h1,w1)*(new_position(1) - h_new) + ...
R(h_new,w1)*(h_new + 1 - new_position(1));
R_final(h,w) = R_temp1*(w_new + 1 - new_position(2)) + ...
R_temp2*(new_position(2) - w_new);
G_temp1 = G(h1,w_new)*(new_position(1) - h_new) + ...
G(h_new,w_new)*(h_new + 1 - new_position(1));
G_temp2 = G(h1,w1)*(new_position(1) - h_new) + ...
G(h_new,w1)*(h_new + 1 - new_position(1));
G_final(h,w) = G_temp1*(w_new + 1 - new_position(2)) + ...
G_temp2*(new_position(2) - w_new);
B_temp1 = B(h1,w_new)*(new_position(1) - h_new) + ...
B(h_new,w_new)*(h_new + 1 - new_position(1));
B_temp2 = B(h1,w1)*(new_position(1) - h_new) + ...
B(h_new,w1)*(h_new + 1 - new_position(1));
B_final(h,w) = B_temp1*(w_new + 1 - new_position(2)) + ...
B_temp2*(new_position(2) - w_new);
else
gray_temp1 = im_init(h1,w_new)*(new_position(1) - h_new) + ...
im_init(h_new,w_new)*(h_new + 1 - new_position(1));
gray_temp2 = im_init(h1,w1)*(new_position(1) - h_new) + ...
im_init(h_new,w1)*(h_new + 1 - new_position(1));
im_final(h,w) = gray_temp1*(w_new + 1 - new_position(2)) + ...
gray_temp2*(new_position(2) - w_new);
end
end
end
end
end
if ndims(im_init) == 3
im_final(:,:,1) = R_final;
im_final(:,:,2) = G_final;
im_final(:,:,3) = B_final;
end
im_final = im2uint8(mat2gray(im_final));

⑤ 那個C++高手給解釋一下怎麼才能實現圖形旋轉 求代碼

使用GDI
void CAaaView::OnDraw(CDC* pDC)
{

CAaaDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

Graphics graphics( pDC->m_hDC );
Image image(L"2.bmp");
Point points[] = { Point(0, 0), Point(image.GetWidth(), 0),
Point(0, image.GetHeight())};
Matrix matrix(1,0,0,1,230,10); // 定義一個單位矩陣,坐標原點在(230,10)
matrix.Rotate(30); // 順時針旋轉30 度
matrix.Scale(0.63,0.6); // X 和 Y 方向分別乘以0.63 和0.6 比例因子
matrix.TransformPoints(points, 3); // 用該矩陣轉換points
graphics.DrawImage(&image, points, 3);

// TODO: add draw code for native data here
}

⑥ 用c語言編程三角形繞一點旋轉九十度怎麼做

A(ax, ay) B(bx, by) C(cx, cy) 移動後A(ax0, ay0)... 1)ax = r*cosα ay = r*sinα ax0 = r*cos(α+90) ay0=r*sin(α+90) 用三角函數展開就ok了 2)旋轉90度就是坐標點從一個象限旋轉到另一個象限,先判斷正負,再將橫縱坐標交換並根據正負情況乘以-1或者1 這個問題就是高中解析幾何的旋轉問題。或者圖形學里的二維圖形旋轉問題

⑦ 如何編程實現圖像任意角度旋轉

圖像整體任意角度旋轉,就是一個像素一個像素的來的
你上面的效果是兩幅圖像的效果
你上面兩幅圖像的效果就是平常意義上的像素旋轉
只不過一幅圖像的時候我們用黑色區域代替 而樓主用另一個圖像代替
這不矛盾
也就是說旋轉超出邊界的部分用第二個圖像填充
就是你上面的效果
你如果編過旋轉 縮放 仿射等matlab函數,你就可以很快的達到你想要的效果
想matlab里的imrotate函數 你可以自己編編實現一下

⑧ 用編程語言實現一個正方形360°旋轉 下面是我寫的一個畫正方形的代碼! 我想要的是演算法。要求完整代碼。

WINDOWS圖像編程

--------------------------------------------------------------------------------

圖形設備介面(GDI,Graphics Device Interface)的主要目標之一是支持在輸出設備(如視頻顯示器、列印機和繪圖儀)上的與設備無關的圖形。 GDI通過將應用程序與不同輸出設備特性相隔離,使Windows應用程序能夠毫無問題地在Windows支持的任何圖形輸出設備上運行。
Windows中的圖形基本上是由從GDI.EXE模塊中輸出的函數處理的(盡管一些繪制函數實際上具有USER.EXE的入口點),GDI.EXE模塊調用在不同驅動程序文件中的常式,其中有一個.DRV驅動程序文件用於控制顯示屏幕,並且可能有一個或多個其他的.DRV驅動程序文件用來控制列印機或繪圖儀。
Windows GDI使用兩種坐標系統。使用虛擬坐標系統可以使程序不依賴於具體的硬體,使用設備坐標系統可以使程序和硬體緊密相聯。
GDI含有在Windows應用程序內部執行、且與設備無關的圖形操作函數,這些函數可產生各種各樣的線、正文和點陣圖,它們可以輸出到許多不同的輸出設備上。GDI允許一個應用程序產生筆、刷子、字體和點陣圖,以供特定的輸出操作使用。下面列出GDI中幾組比較常用的函數:
·設備上下文函數
·橢圓和多邊形函數
·繪圖工具函數
·點陣圖函數
·繪圖屬性函數
·正文函救
·映射函數。
·坐標函數
·元文件(metafile)函數
·區域函數
·裁剪(clipping)函數·
窗口應用程序輸出圖形的操作步驟如下:
①取得指定窗口的當前顯示設備上下丈,顯示設備上下文實際上是一個數據結構,它包括該窗口的參數及各種圖形、文字屬性的現行設定值,它們對以後的圖形、文字輸 出命令起控製作用。
②選擇用戶坐標系及映射方式。
③設定用戶坐標系中的觀察窗口和設備坐標系中的顯示視區。
④輸出圖形、文字和圖象。
⑤釋放所使用的顯示設備上下文。

當想要在圖形輸出設備(例如屏幕或列印機)上繪制圖形時,必須首先獲得設備上下文的句柄。先給出這個句柄,Windows才允許程序使用設備,在GDI函數中將句柄作為一個參數傳入,向Windows標明需要使用的設備。
設備上下文中包含許多屬性,當GDI在不同的設備上工作時都要用到這些屬性。使用這些屬性可使GDI只關心起始和終止坐標的大小,而不必關心有關對象的其他屬性,如顏色、背景等等,因為這些都是設備上下文的一部分。當需要修改這些屬性時,只需調用一個修改設備上下文中屬性的參數,以後的程序中都使用修改後的設備上下文屬性。設備上下文是連接Windows應用程序、設備驅動程序以及輸出設備的紐帶。
獲取設備上下文句柄有多種方法。最一般的方法是當處理一條消息時獲得了設備上下文、並在退出窗口之前釋放它。一般的處理方法如下:
在處理WM_PAINT消息時
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps)
EndPaint (hwnd,&ps);
其數據結構為:
HDC hWnd;
PAINTSTRUCT ps;
而在windows.h中定義了PAINTSTRUCT的數據結構。
type struct tagPAINTSTRUCT {
HDC hdC;
BOOL fErase;
RECT rcPaint;
BOOL fRestore;
BOOL flncUpdate;
BYTE rgbReserved[16];
}PAINTSTRUCT;
其中,hdc用於標識顯式上下文,fErase指出背景是否重畫,rcPaint是塗色矩形,其餘的域均為保留。這里的hdc是BeginPaint返回的設備上下文句柄,有了從DeginPaint獲取的設備上下文句柄,就可以也只能在ps指出的rcPaint的矩形內繪圖,EndPaint調用使這一區域有效。
第二種方法如下所示,使用這種方法獲取和釋放設備上下文可以在整個用戶區內畫圖,圖形在整個用戶區域內都有效:
hdC=GetDc (hwnd );
…畫圖操作…
ReleaseDC (hwnd , hdc );
使用下面第三種方法獲取和釋放設備上下文,可以在整個窗口內畫圖,圖形在整個窗口內有效:
hdC=GetWindowDc(hwnd);
…畫圖操作…
ReleaseDc(hwnd,hdc);
使用下面第四種方法獲取和釋放設備上下文,可以在整個顯示器區域內畫圖,圖形在整個顯示器區域內部有效:
hdc=CreateDC (lpszDriver ,lpszDevice ,lpszOutput , lpData);
…畫圖操作…
ReleaseDC(hdc);
其中lpszDriver指向設備驅動程序的DOS文件名(不帶擴展名),lpszDevice指向專用設備名(例如Epson Fx-80),lpszOutput指向物理輸出介質(文件或輸出埠)的DOS文件名或設備名,lpData指向含有設備驅動程序的設備專用的初始化數據的DEVMODE數據結構。例如:
hdc=CreateDC("DISPLAY",NULL,NULL,NULL);
使用屏幕畫圖,而:
hdc= CreateDC ("IBMGRX","IBM Graphics","LPT1",NULL );
在列印機上輸出圖形,這里的lpData置為默認值,可以在WIN.INI中找到初始化值。
如果不需要獲取設備上下文,即不需要在設備上下文中操作,只需了解有關設備上下文的信息,可以用如下語句:
hdcInfo = CreateDC (lpszDriver, lpszDevice,lpszOutput, lpData );
……
DeteteDC (hdcInfo);
另外,還可以使用設備上下文來對點陣圖的內存進行控制,如下所示:
hdcMem = CreateCompatibleDC (hdc)
OeleteDc(hdcMem );
一個元文件是以二進制形式編碼的GDI調用集合,可通過獲取一個元文件設備上下文來建立一個文件:
hdcMeta=CreateMetaFile(lpszFilename);
……
hmf=CloseMetaFile(hdCMeta);
在元文件設備上下文有效期間,使用hdcMeta所進行的任何GDI調用都成為元文件的一部分,當調用CloseMetaFile時,設備上下文句柄變化無效,函數返回元文件(hmf)的句柄。
一個設備上下文通常涉及物理設備,如視頻顯示器、列印機等,所以需要獲取有關該設備的信息,如顯示器大小和彩色能力等。可以通過調用GetDeviceCaps函數來獲取這樣的信息:
nValue=GetDeviceCaps (hdc,nIndex);
這里的hdc標識設備上下文,nIndex確定返回值,它可以是window.h中所定義的28個標識符中的一個,例如nIndex=DRIVEVERSION,則該函數返回的是版本號。

真正影響在用戶區域上繪制過程的設備上下文屬性是「映射方式」,與映射方式屬性密切相關的還有如下四個設備上下義屬性:窗口原點、視窗原點、窗口范圍和視窗范圍。
Windows定義了八種映射方式,即:

這里的TWIP指的是1/1440英寸,in.代表英寸。
可以調用函數setMapMode(hdc,MapMode)來設置這八種映射方式中的一種。hdc用來標識設備上下文,nMapMode可以取MM_TEXT、MM_LOMETRIC、MM_HIMETRIC等八個值中的一個。在設置了映射方式之後,到下一次設置映射方式之前,Windows一直使用這種映射方式。如果想要獲取當前的映射方式,可用:
nMapMode= GetMapMode (hdc)
在設置了映射方式之後,就規定了邏輯單位的大小和增量的方式,在GDI畫圖函數中,可以不必考慮這些內容而直接使用邏輯數字,如:
SetMapMode(hdc ,MM_TEXT);
TextOut(hdc,8 ,16,szBuffer ,nLength)
即正文從用戶區域左起第八個象素,頂邊起第16個象素的位置開始寫操作。不管映射方式如何,Windows函數中所有坐標規定為-32768 到 32767之間的帶符號短整救。
注意映射方式只是一個設備上下文屬性,因此映射方式唯一起作用的是將映射方式作為設備上下文句柄屬性,而將該句柄當作參數的GDI函數,因此象GetSystemMetrics這樣的非GDI函數,將繼續以設備單位(象素值)返回尺寸值。

用GDI的SetPixel函數可以繪制一特定顏色的象素:
rgbActualColor =SetPixel (hdc,x,y,rgbColor);
這里hdc標識設備上下文,x ,y表示點坐標,rgbColor為一無符號的長整數,其結構為:
COLORREF rgbColor;
其中低位位元組為紅基色的相對亮度值,第二個位元組包含綠基色的相對亮度值,第三個位元組包含藍基色的相對亮度值,高位位元組必須為零。可以使用RGB函數來獲取rgbColor。
rgbColor =RGB(byRed ,byGreen,byBlue);
這里的byRed、byGreen、byBlue取值范圍為0~255,分別代表紅色、綠色、藍色的亮度。給出正確的參數之後,SetPixel返回的是調色板中最靠近所需彩色的顏色。還可以使用如下方法來取得一個特定象素的顏色:
rgbCotor= GetPixel(hdc,x,y);

畫線函數主要有三種, LineTo、Polyline 和 Arc。還有五個設備上下文屬性會影響這些函數畫出的線的外觀:筆的當前位置(僅對LineTo有影響)、筆、背景方式(對非實心筆有影響)、背景顏色(對 OPAQUE背景方式)以及繪制方式。
在這些設備上下文的屬性中,筆的當前位置影響畫線的起點,筆影響線的粗細等形狀,背景方式影響非實心筆畫出的線的模板圖形,背景顏色影響線模板背景色,繪制方式影響實心線、虛線等線屬性。
以下是典型的畫線操作步驟:
MoveTo(hdc,xStart,yStart);
LineTo(hdc ,xEnd ,yEnd);
上面兩句畫出一條從(xStart,yStart)到(xEnd,yEnd)的直線。
可以使用語句:
dwPoint = GetCurrentPosition (hdc);
獲得筆的當前位置。這里,dwPoint返回值是一個無符號長整數(或雙倍長字),其中低位字含有X坐標,高位字含有Y坐標。
可以使用MAKEPOINT函數將dwPoint轉換為POINT結構;
point = MAKEPOINT (dwPoint);
point的類型為POINT:
typedef struct togPOINT {kk1}
int x;
int y;
}POINT;
Polyline用於繪制折線,例:
Polyline(hdc,&pt,5)
將數組pt中的5個點之間用線段相連。
Arc用於畫橢圓的周邊:
Arc (hdc,xLeft,yTop,xRight,yBottom,xStart,yStart,XEnd,yEnd );
畫出的橢圓以左上角為(xLeft,yTop),右下角為(xRight,yBottom)的矩形為界,圓弧開始於橢圓和(xStart,yStart)與橢圓中心的連線的交點處,沿著橢圓周邊的過時針方向繪制,並終止於橢圓和(xEnd,yEnd)與橢圓中小的連線的交點處。
當調用LineTo、Polyline和Arc時,Windows使用當前在設備上下文中選擇的筆來畫線,筆決定了線的顏色、密度和型式,而線型可以是實線、點線或短劃(虛)線,預設設備上下文中的筆叫做BLACK_PEN,不管映射方式如何選支筆以一個象素的寬度畫黑色的實線, BLACK_PEN是Windows提供的三支「備用筆」之一,其他兩支是WHITE_PEN和NULL_PEN,NULL_PEN是一支什麼都不畫的空筆,當然用戶也可以自己建立定製的筆。
可以通過一個句柄來引用所需的筆:
HPEN hPen;
hPen =GetStockObject(WHITE_PEN);
SelectObjeCt (hdc ,hPen) ;
SelectObject (hdc , hBrush ) ;
將邏輯刷送入設備上下文中。如果使用結束,可以用:
DeletObject (hBrush ) ;
刪除一把已建立的刷子,如果在程序中需要獲取有關於刷子的信息,則可以調用:
3.像素格式結構
每個OpenGL顯示設備都支持一種指定的像素格式。一般用一個名為PIXELFORMATDESCRIPTOR的結構來表示某個特殊的像素格式,這個結構包含26個屬性信息。Win32定義PIXELFORMATDESCRIPTOR如下所示:
typedef struct tagPIXELFORMATDESCRIPTOR
{ kk1}
// pfd
WORD nSize;
WORD nVersion;
DWORD dwFlags;
BYTE iPixelType;
BYTE cColorBits;
BYTE cRedBits;
BYTE cRedShift;
BYTE cGreenBits;
BYTE cGreenShift;
BYTE cBlueBits;
BYTE cBlueShift;
BYTE cAlphaBits;
BYTE cAlphaShift;
BYTE cAccumBits;
BYTE cAccumRedBits;
BYTE cAccumGreenBits;
BYTE cAccumBlueBits;
BYTE cAccumAlphaBits;
BYTE cDepthBits;
BYTE cStencilBits;
BYTE cAuxBuffers;
BYTE iLayerType;
BYTE bReserved;
DWORD dwLayerMask;
DWORD dwVisibleMask;
DWORD dwDamageMask;
} PIXELFORMATDESCRIPTOR;

4.初始化PIXELFORMATDESCRIPTOR結構
PIXELFORMATDESCRIPTOR中每個變數值的具體含義和設置可以參考有關資料,下面舉出一個PIXELFORMATDESCRIPTOR初始化例子來簡要說明相關變數的意義。定義PIXELFORMATDESCRIPTOR結構的pfd如下:
PIXELFORMATDESCRIPTOR pfd = { kk1}
sizeof(PIXELFORMATDESCRIPTOR), . //size of this pfd 1
PFD_DRAW_TO_WINDOW| // support window
PFD_SUPPORT_OPENGL| // support OpenGL
PFD_DOUBLEBUFFER, // double buffered
PFD_TYPE_RGBA, // RGBA type
24, // 24-bit color depth
0,0,0,0,0,0, // color bits ignored
0, // no alpha buffer
0, // shift bit ignored
0, // no accumulation buff
0,0,0,0, // accum bits ignored
32, // 32-bit z-buffer
0, // no stencil buffer
0, // no auxiliary buffer
PFD_MAIN_PLANE, // main layer
0, // reserved
0,0,0 // layer masks ignored
};
在這個結構里,前兩個變數的含義十分明顯。第三個變數dwFlags的值是
PFD_DRAW_TO_WINDOW |PFD_SUPPORT_OPENGL ,
表明應用程序使用OpenGL函數來繪制窗口
第四個:
PFD_DOUBLEBUFFER,
表明當前採用RGBA顏色模式,第五個採用24位真彩色,既1.67千萬種顏色,如果是256色系統則自動實現顏色抖動;因為沒有使用alpha緩存和累計緩存,所以從變數cAlphaBits到cAccumAlphaBits都設置為0;深度緩存設置為32位,這個緩存能解決三維場景的消隱問題;變數cAuxBuffers設置為0,在Windows 95下不支持輔助緩存;Windows 95下針對OpenGL變數ilayerType只能設置為PFD_MAIN_PLANE,但在其它平台也許支持PFD_MAIN_PLANE或PFD_MAIN_UNDERLAYPLANE;接下來bReserved變數只能設為0,而最後三個變數Windows 95都不支持,故全設置為0

⑨ 組態王中,如何編程序,讓一個圖形不停地旋轉

雙擊要旋轉的圖形,然後選擇——旋轉
組態王這種旋轉圖案不怎麼好看,很多是用其他軟體製作的動畫或GIF圖案,用點點陣圖的方式實現的。希望能幫到你。

⑩ matlab中怎樣將圖形旋轉一定角度

利用轉軸坐標變換公式,將橢圓變成斜橢圓。其變換式

熱點內容
釘鼎伺服器出口ip 發布:2025-05-15 07:13:08 瀏覽:279
移動硬碟和光碟哪個存儲時間長 發布:2025-05-15 07:04:25 瀏覽:489
壓縮一定 發布:2025-05-15 06:57:30 瀏覽:289
進棧演算法 發布:2025-05-15 06:56:02 瀏覽:215
安卓和緩存 發布:2025-05-15 06:56:02 瀏覽:428
筆記本電腦台式伺服器 發布:2025-05-15 06:40:41 瀏覽:109
4k無壓縮 發布:2025-05-15 06:02:54 瀏覽:75
hp存儲6350 發布:2025-05-15 05:40:41 瀏覽:233
怎麼更改電腦默認緩存位置 發布:2025-05-15 05:39:01 瀏覽:877
安卓qq公孫離在哪個戰區戰力最低 發布:2025-05-15 05:38:58 瀏覽:494