利用C语言实现二维图形的变换你先看看吧 , 思路大概就是这样,不懂的问我 。
#includestdio.h
#includemath.h
#includeiostream
using namespace std;
struct point
{
float x;
float y;
};
void translation(point*pt, float xp,float yp,int num)//num代表点的个数
{
for(int i=0;inum;i)
{
(pt i)-x =xp;
(pt i)-y =yp;
}
}
void scale(point *pt,float xs,float ys,int num)
{
for(int i=0;inum;i)
{
(pt i)-x*=xs;
(pt i)-y*=ys;
}
}
void rotation(point *pt,float angle,int num)
{
int a[2][2];
angle=angle/180*3.141592657;
a[0][0]=cos(angle);
a[0][1]=-sin(angle);
a[1][0]=sin(angle);
a[1][1]=cos(angle);
point* temp;
for(int i=0;inum;i)
{
temp-x=(pt i)-x;
temp-y=(pt i)-y;
(pt i)-x=temp-x*a[0][0] a[0][1]*temp-y;
(pt i)-y*=temp-x*a[1][0] a[1][1]*temp-y;
}
}
int main()
{
int i=0,N,mode,angle,xp,yp,xk,yk,num;
cout"please input the number of point "endl;
scanf("%d",N);
num=N;
point pt[10];
while(N--)
{
printf("please input points(x,y):\n");
scanf("%f%f",pt[i].x,pt[i].y);
i;
}
printf("please input motions\n");
printf("0 stand for translation:\n");
printf("1 stand for scale:\n");
printf("2 stand for rotation:\n");
scanf("%d",mode);
switch(mode)
{
case 0:
printf("please input the translation in x and y direction respectivly:\n");
cinxpyp;
translation(pt, xp,yp,num);
break;
case 1:
printf("please input the scale in x and y direction respectivly:\n");
scanf("%f%f",xk,yk);
scale(pt, xk,yk,num);
break;
case 2:
printf("please input the angle:\n");
scanf("%f",angle);
rotation(pt, angle,num);
break;
}
printf("after translatiton or scale or rotation:\n");
for(int i=0;inum;i)
printf("%f%f\n",pt[i].x,pt[i].y);
}
C语言编程,编写一个将十进制数转换成十六进制数的小程序 。(请指教,谢谢 。)/* 函数trans将无符号整数n翻译成d(2=d=16)进制表示scale函数C语言的字符串s */
#include stdio.h
#include windows.h
#include conio.h
#define M sizeof(unsigned int)*8
int trans(unsigned n, int d, char s[])
{
static char digits[] ="0123456789ABCDEF"; /* 十六进制数字的字符 */
char buf[M 1];
int j, i = M;
if(d2||d16)
{
s[0]='\0';/* 不合理的进制scale函数C语言,置s为空字符串 */
return 0;/* 不合理的进制scale函数C语言,函数返回0 */
}
buf[i]='\0';
do
{
buf[--i]=digits[n%d];/*译出最低位scale函数C语言,对应字符存入对应工作数组中*/
n/=d;
}while(n);
/* 将译出在工作数组中的字符串复制到s */
for(j=0;(s[j]=buf[i])!='\0';j,i);
/* 其中控制条件可简写成s[j]=buf[i] */
return j;
}
/* 主函数用于测试函数 trans() */
int main()
{
unsigned int num = 253;
int scale[]={2,3,10,16,1};
char str[33];
int i;
system("cls");
for(i=0;isizeof(scale)/sizeof(scale[0]);i)
{
if(trans(num,scale[i],str))
printf("] = %s(%d)\n",num,str,scale[i]);
else
printf("] = (%d) Error! \n",num,scale[i]);
}
printf("\n Press any key to quit...\n");
getch();
return 0;
}
适当修改下
关于C语言中的函数调用问题,出现了以下错误,现贴出程序,请大家帮忙看一看,我是菜鸟....万分感谢!怀疑你这段代码是不是书上摘来的,连main()函数都没有,修改了下代码,上面四个错误不再出现了,你再把main()函数补上,应该可以运行了 。
#include stdio.h
#include "math.h"
#include "stdlib.h"
void iirbcfpass(ns,n,f1,f2,f3,f4,db,b,a)
double b[],a[],f1,f2,f3,f4,db;
int ns,n;
{
int k;
double *d,*c;
double omega,lamda,esslon,fl,fh;//带通不需要omega;lamda;warp();bpsub();omin(),cosh1()
void bwtf();//函数声明
//double cosh1(),warp(),bpsub();omin();
void fblt();//函数声明
fl=f2;
fh=f3;
for (k=0;kns;k)
{
bwtf(2*ns,k,4,d,c);//求归一化L阶的每一阶的分子、分母系数
fblt(d,c,n,fl,fh,b[k*(n 1) 0],a[k*(n 1) 0]);//计算出低通滤波器系数 , 然后转化成为带通系数
}
}
【scale函数C语言 c语言scanf函数详解】static void bwtf(ln,l,k,n,d,c) //求归一化L阶的每一阶的分子、分母系数
int ln,k,n;
double d[],c[];
{
int i;
double pi,tmp;
pi=4.0*atan(1.0);
d[0]=1.0;
c[0]=1.0;
for (i=1;in;i)
{
d[i]=0.0;
c[i]=0.0;
}
tmp=(k 1)-(ln 1.0)/2.0;
if (tmp==0.0)
{
c[1]=1.0;
}
else
{
c[1]=-2.0*cos((2*(k 1) ln-1)*pi/(2*ln));
c[2]=1.0;
}
}
static void fblt(d,c,n,fln,fhn,b,a)//计算出低通滤波器系数,然后转化成为带通系数
int n;
double fln,fhn,d[],c[],b[],a[];
{
int i,k,m,n1,n2,ls;
double pi,w,w0,w1,w2,tmp,tmpd,tmpc,*work;
double combin();
void bilinear();
pi=4.0*atan(1.0);
w1=tan(pi*fln);
for (i=n;i=0 ;i-- )
{
if(c[i]!=0.0 || (d[i]!=0.0))
break;
}
m=i;//标示非0值的位置
n2=2*m;
n1=n2 1;
work=malloc(n1*n1*sizeof(double));
w2=tan(pi*fhn);
w=w2-w1;
w0=w1*w2;
for (i=0;i=n2 ;i)
{
work[0*n1 i]=0.0;//小心1与l
work[1*n1 i]=0.0;
}
for (i=0;i=m ;i)
{
tmpd=d[i]*pow(w,(m-i));
tmpd=c[i]*pow(w,(m-i));
for (k=0;k=i ;k)
{
ls=m i-2*k;
tmp=combin(i,i)/(combin(k,k)*combin(i-k,i-k));
work[0*n1 ls] =tmpd*pow(w0,k)*tmp;
work[1*n1 ls] =tmpc*pow(w0,k)*tmp;
}
}
for (i=0;i=n2 ;i)
{
d[i]=work[0*n1 i];
c[i]=work[1*n1 i];
}
free(work);
bilinear(d,c,b,a,n);//合并每个级的系数到一个大的传递函数系数集合
}
static double combin(i1,i2)
int i1,i2;
{
int i;
double s;
s=1.0;
if (i2==0) return(s);
for (i=i1;i(i1-i2) ;i-- )
{
s*=i;
}
return(s);
}
static void bilinear(d,c,b,a,n)
int n;
double d[],c[],b[],a[];
{
int i,j,n1;
double sum,atmp,scale,*temp;
n1=n 1;
temp=malloc(n1*n1*sizeof(double));
for (j=0;j=n ;j)
{
temp[j*n1 0]=1.0;
}
sum=1.0;
for (i=1;i=n;i)
{
sum=sum*(double)(n-i-1)/(double)i;
temp[0*n1 i]=sum;
}
for (i=1;i=n ;i)
for (j=1;j=n ;j)
{
temp[j*n1 i]=temp[(j-1)*n1 i]-temp[j*n1 i-1]-temp[(j-1)*n1 i-1];
}
for (i=n;i=0 ;i-- )
{
b[i]=0.0;
atmp=0.0;
for (j=0;j=n ;j)
{
b[i]=b[i] temp[j*n1 i]*d[j];
atmp=atmp temp[j*n1 i]*c[j];
}
scale=atmp;
if (i!=0)
{
a[i]=atmp;
}
}
for (i=0;i=n ;i)
{
b[i]=b[i]/scale;
a[i]=a[i]/scale;
}
a[0]=1.0;
free(temp);
}
关于scale函数C语言和c语言scanf函数详解的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 云浮直播录屏怎么录,直播录屏如何录
- 索泰显卡售后怎么报修的,索泰显卡售后流程
- 像素小鸟html代码,像素鸟项目内容说明
- 科普网站毕业设计,科普网页设计
- c语言调用函数没有返回 c语言中调用函数返回的数值
- 如何放松银行对营销的管制,银行如何加大营销力度
- 虚拟主机播放ppt,虚拟化ppt
- 移动远程服务器价格,中国移动远程服务器错误是什么意思
- go语言log文件 go语言 log