新聞中心
求一用C語言畫直線的程序
C語言的話畫直線用MoveTo()和LineTo()很簡(jiǎn)單啊。
創(chuàng)新互聯(lián)專注于企業(yè)營(yíng)銷型網(wǎng)站、網(wǎng)站重做改版、龍鳳網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站、商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為龍鳳等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
幫你復(fù)制一份我學(xué)習(xí)時(shí)老師給的畫線兩例:
#includegraphics.h
#includemath.h
/*
###############################################################################
功 能:本函數(shù)的作用是用逐點(diǎn)比較法來畫一條直線
格 式:void myline1(int x1,int y1,int x2,int y2,int color)
參數(shù)說明:x1,y1是起始點(diǎn)坐標(biāo),x2,y2是終止點(diǎn),color是畫線的顏色
調(diào)用示例:myline1(10,20,500,440,4)
###############################################################################
*/
void myline1(int x1,int y1,int x2,int y2,int color)
{
/*變量定義開始(2007/10/16增加)*/
int iTx; /*x軸終點(diǎn)的相對(duì)坐標(biāo)xa或臨時(shí)變量*/
int iTy; /*y軸終點(diǎn)的相對(duì)坐標(biāo)ya或臨時(shí)變量*/
int iDx; /*x軸方向的步長(zhǎng)dx*/
int iDy; /*y軸方向的步長(zhǎng)dy*/
int iFt; /*偏差Fm*/
int iSt; /*記數(shù)循環(huán)數(shù)(dx+dy)S*/
int iXt; /*x方向循環(huán)變量xm*/
int iYt; /*y方向循環(huán)變量ym*/
/*變量定義結(jié)束*/
/*變量初始化開始*/
/*如果是第三象限或第四象限則換成第一或第二象限*/
if(y2y1)
{
iTx=x1;
x1=x2;
x2=iTx;
iTy=y1;
y1=y2;
y2=iTy;
}
iTx=x2-x1; /*取x軸的相對(duì)坐標(biāo)*/
iTy=y2-y1; /*取y軸的相對(duì)坐標(biāo)*/
iDx=1;
iDy=1;
iFt=0;
iSt=iTx+iTy;
if(iTx0)iSt=-1*iTx+iTy;; /*如果在第二象限,則x軸方向步長(zhǎng)取負(fù)值*/
iXt=0;
iYt=0;
/*變量初始化結(jié)束*/
/*數(shù)據(jù)處理開始*/
while(iSt0)
{
putpixel(x1+iXt,y1+iYt,color);
if(iTx=0) /*如果在第一象限*/
{
if(iFt0) /*如果偏差小于0*/
{
iYt+=iDy; /*y方向走一步*/
iFt+=iTx;
}
else /*如果偏差大于或等于0*/
{
iXt+=iDx; /*x方向走一步*/
iFt-=iTy;
}
}
else
{
if(iFt0) /*如果偏差小于0*/
{
iXt-=iDx; /*負(fù)x方向走一步*/
iFt+=iTy;
}
else /*如果偏差大于或等于0*/
{
iYt+=iDy; /*y方向走一步*/
iFt+=iTx;
}
}
iSt--;
}
}
/*
###############################################################################
功 能:本函數(shù)的作用是用來畫一條直線
格 式:void myline2(int x1,int y1,int x2,int y2,int color)
參數(shù)說明:x1,y1是起始點(diǎn)坐標(biāo),x2,y2是終止點(diǎn),color是畫線的顏色
調(diào)用示例:myline2(10,20,500,440,4)
###############################################################################
*/
int myline2(int x1,int y1,int x2,int y2,int color)
{
int iX; /*x方向的坐標(biāo)變量*/
int iY; /*y方向的坐標(biāo)變量*/
int iTx; /*x方向的步長(zhǎng)變量*/
int iTy; /*y方向的步長(zhǎng)變量*/
float fDx; /*x方向的差分變量*/
float fDy; /*y方向的差分變量*/
float fMinf; /*算法中的f*/
float fMaxF; /*算法中的F*/
float fS; /*終點(diǎn)判斷變量*/
fMinf=0.5; /*f=0.5*/
iX=x1;
iY=y1;
putpixel(x1,y1,color);
if(x1==x2y1==y2) /*如果終點(diǎn)和起始點(diǎn)相同*/
{
return(1);
}
iTx=1;
iTy=1;
fDx=(float)(x2-x1);
fDy=(float)(y2-y1);
fMaxF=fDy/fDx0?fDy/fDx:(-fDy/fDx); /*F=|dy/dx|*/
if(fDx0)iTx=-1;
if(fDy0)iTy=-1;
fS=fDx0?fDx:(-fDx);
if(fMaxF==1) /*如果F=1*/
{
iX=x1;
iY=y1;
while(fS0)
{
iX+=iTx; /*x方向走一步*/
iY+=iTy; /*y方向走一步*/
putpixel(iX,iY,color);
fS--;
}
}
else if(fMaxF1) /*如果F1*/
{
fS+=fDy0?fDy:(-fDy);
while(fS0)
{
iY+=iTy; /*y方向走一步*/
putpixel(iX,iY,color);
fMinf+=1/fMaxF; /*f=f+1/F*/
fS--;
if(fMinf=1) /*如果f=1*/
{
iX+=iTx; /*x方向走一步*/
fMinf--; /*f=f-1*/
putpixel(iX,iY,color);
fS--;
}
}
}
else /*如果F1*/
{
fS+=fDy0?fDy:(-fDy);
while(fS0)
{
iX+=iTx; /*x方向走一步*/
putpixel(iX,iY,color);
fMinf+=fMaxF; /*f=f+F*/
fS--;
if(fMinf=1) /*如果f=1*/
{
iY+=iTy; /*y方向走一步*/
fMinf--; /*f=f-1*/
putpixel(iX,iY,color);
fS--;
}
}
}
}
e的正弦次方加上e的負(fù)正弦次方等于
#include頭文件這個(gè)庫中有函數(shù)exp(x)相信能滿足您的要求cmath是c++語言中的庫函數(shù),其中的c表示函數(shù)是來自c標(biāo)準(zhǔn)庫的函數(shù),math為數(shù)學(xué)常用庫函數(shù)。cmath庫函數(shù)列表:C語言提供了以下的數(shù)學(xué)函數(shù),要使用這些函數(shù)時(shí),在程序文件頭必須加入:#include編譯時(shí),必須加上參數(shù)「-lm」(表示連結(jié)至數(shù)學(xué)函式庫),例如「gcc-lmtest.c」。函數(shù)之自變量與傳回之值型別見自變量或函數(shù)前之型別宣告。函數(shù)已經(jīng)在「math.h」或其它標(biāo)頭檔宣告過了,因此在使用時(shí)不必再加型別宣告,例如「y=sin(x);」,不用寫成「y=doublesin(doublex);」。函數(shù)說明:using::abs;//絕對(duì)值using::acos;//反余弦using::acosf;//反余弦using::acosl;//反余弦using::asin;//反正弦using::asinf;//反正弦using::asinl;//反正弦using::atan;//反正切using::atan2;//y/x的反正切using::atan2f;//y/x的反正切using::atan2l;//y/x的反正切using::atanf;//反正切using::atanl;//反正切using::ceil;//上取整using::ceilf;//上取整using::ceill;//上取整using::cos;//余弦using::cosf;//余弦using::cosh;//雙曲余弦using::coshf;//雙曲余弦using::coshl;//雙曲余弦using::cosl;//余弦using::exp;//指數(shù)值using::expf;//指數(shù)值using::expl;//指數(shù)值using::fabs;//絕對(duì)值using::fabsf;//絕對(duì)值using::fabsl;//絕對(duì)值using::floor;//下取整using::floorf;//下取整using::floorl;//下取整using::fmod;//求余using::fmodf;//求余using::fmodl;//求余using::frexp;//返回value=x*2n中x的值,n存貯在eptr中using::frexpf;//返回value=x*2n中x的值,n存貯在eptr中using::frexpl;//返回value=x*2n中x的值,n存貯在eptr中using::ldexp;//返回value*2exp的值using::ldexpf;//返回value*2exp的值using::ldexpl;//返回value*2exp的值using::log;//對(duì)數(shù)using::log10;//對(duì)數(shù)using::log10f;//對(duì)數(shù)using::log10l;//對(duì)數(shù)using::logf;//對(duì)數(shù)using::logl;//對(duì)數(shù)using::modf;//將雙精度數(shù)value分解成尾數(shù)和階using::modff;//將雙精度數(shù)value分解成尾數(shù)和階using::modfl;//將雙精度數(shù)value分解成尾數(shù)和階using::pow;//計(jì)算冪using::powf;//計(jì)算冪using::powl;//計(jì)算冪using::sin;//正弦using::sinf;//正弦using::sinh;//雙曲正弦using::sinhf;//雙曲正弦using::sinhl;//雙曲正弦using::sinl;//正弦using::sqrt;//開方using::sqrtf;//開方using::sqrtl;//開方using::tan;//正切using::tanf;//正切using::tanh;//雙曲正切using::tanhf;//雙曲正切using::tanhl;//雙曲正切using::tanl;//正切
cosf 這個(gè)函數(shù)是用來干什么的????
inline float cosf(float _X) ——MSDN中的函數(shù)原型,也是求弧度值的余弦值。就是指針對(duì)flaot型的!是cos()的一個(gè)特例。建議使用cos()有多種重載形式,可保證無錯(cuò)!好運(yùn)!
為什么匯編時(shí)序比C會(huì)精準(zhǔn)
在單片機(jī),ARM的裸機(jī)上,匯編真的比C精準(zhǔn)。每條匯編指令用幾個(gè)機(jī)器周期都是確定的,你用匯編寫個(gè)排序算法用多少毫秒都是可以算出來的。
但是一旦上了操作系統(tǒng),特別是分時(shí)的Windows,即使是匯編程序,也會(huì)變得“不精準(zhǔn)”。
說C語言“不精準(zhǔn)”,主要是編譯器怎么生產(chǎn)匯編指令對(duì)你是透明的。你不知道你的C代碼會(huì)編譯成怎樣的匯編代碼。
以上是有關(guān)運(yùn)行時(shí)間的問題。再看浮點(diǎn)計(jì)算的精度。
這個(gè)兩者是完全一致的:加入你用匯編求sinx,cosx的值,你會(huì)使用fsin fcos這些指令。如果你用C語言,Math.h中的sinf cosf函數(shù)最終都是通過相同的匯編指令完成的。所以二者計(jì)算機(jī)過完全一致。你還能通過編譯器選項(xiàng),使調(diào)用過程內(nèi)聯(lián)不轉(zhuǎn)跳,于是在效率上和匯編就一樣了。
但是匯編在特別極端的情況下的卻能優(yōu)化計(jì)算速度,還是以求三角函數(shù)為例,在很多場(chǎng)合都需要同時(shí)求出正弦與余弦,Math.h中的函數(shù)必須兩次調(diào)用,但卻有指令fsincos能同時(shí)算出二者,且速度與單獨(dú)計(jì)算fsin或者fcos是一樣的。
總之,只要你的不是特別底層,特別最求速度的事情,匯編的精確性很難體現(xiàn)出來。
C語言程序設(shè)計(jì)
/*1)*/#include stdio.h
#include math.h
#include conio.h
main()
{
float x,y;
printf("X=");
scanf("%f",x);
if(x=0)
y=sinf(x)+cosf(x)/2;
else
y=sinf(x)-cosf(x)/2;
printf("Y=%f",y);
getch();
}/*---------------------*//*2)*/#include stdio.h
#include math.h
#include conio.h
main()
{
int i,j,res;
for(i=1;i=9;i++)
{
for(j=1;j=i;j++)
{
res=i*j;
printf("%d*%d=%d ",i,j,res);
}
printf("\n");
}
getch();
}/*------------------------------------*//*3*/#include stdio.h
#include conio.h
main()
{
int i,j,tmp,n,num[11];
printf("Input 10 integer:");
for(i=0;i10;i++)
scanf("%d",num[i]);
num[10]=9999; /*臨時(shí)賦予第10個(gè)元素一個(gè)大值*/
for(j=9;j0;j--) /*冒泡法從小到大排序*/
{
for(i=0;i10;i++)
{
n=0;
if(num[i]num[i+1])
{
tmp=num[i+1];
num[i+1]=num[i];
num[i]=tmp;
n++;
}
}
}
for(i=0;i10;i++) /*顯示排序后的數(shù)組前10項(xiàng)*/
printf("%d ",num[i]);
printf("\nInput an integer:");
scanf("%d",n);
for(i=0;i10;i++)
{
if(nnum[i])
break;
}
for(j=10;ji;j--)
{
num[j]=num[j-1];
}
num[i]=n;
for(i=0;i11;i++)
{
printf("%d,",num[i]);
}
getch();
}
c++中使用exp (就是e的多少次方)需要什么頭文件
#includecmath這個(gè)庫包含exp(x)函數(shù),可以解決此問題。
1.打開vc++6.0編譯器,如圖所示選擇新函數(shù)。
2.在新函數(shù)中選擇文件,然后選擇c/c++頭文件,然后在正確的文件名中輸入要使用的頭文件名**。
3.在新的頭文件中輸入你的頭代碼(如圖所示是我剛寫的一個(gè)調(diào)用函數(shù)),鍵入代碼后,點(diǎn)擊左上角保存。
4.找到新的頭文件,復(fù)制或移動(dòng)到VC98\Include目錄下的vc++6.0安裝目錄。
5.再次打開vc++創(chuàng)建一個(gè)新的C語言文件,如下圖所示,選擇該文件,選擇C/c++源文件,輸入文件名**。C(記得帶文件擴(kuò)展名。C),確認(rèn)。
6.在新的c文件中輸入代碼,并聲明您在預(yù)處理命令中編寫的用于調(diào)用頭庫的頭文件的名稱。
分享名稱:c語言cosf函數(shù) C語言cos
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/hhiepp.html