两个简单的问题,解决一个就马上给分

MrYoucheng 2003-07-17 03:34:16
帮朋友问两个问题,最好要完整代码(用c描述)
1 怎么对一个矩阵求逆
2 怎么实现一个小球在一区域内碰撞
...全文
50 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigtea 2003-07-17
  • 打赏
  • 举报
回复
小球碰撞
#include <graphics.h>
int a=10,b=10,m=300,n=400,i=1;
int speed=5000000;

ball(int m,int n,int p,int q,char *clip1)
{for(i=1;;i++)
{putimage(m-i*p,n-i*q,clip1,COPY_PUT);
delay(speed);
if((m-i*p)<0||(n-i*q)<0||(m-i*p)>300||(n-i*q)>400){m=m-i*p;n=n-i*q;a=p;b=q;break;}
}
}

main()
{int driver=DETECT,mode;
char *clip1;
initgraph(&driver,&mode," ");
setcolor(RED);
setfillstyle(SOLID_FILL,RED);
fillellipse(25,25,15,15);
clip1=malloc(imagesize(0,0,100,100));
getimage(0,0,100,100,clip1);
cleardevice();
setcolor(RED);
MOVE:
for(;;i++)
{putimage(m-i*a,n-i*b,clip1,COPY_PUT);
delay(speed);
if((m-i*a)<0||(n-i*b)<0||(m-i*a)>300||(n-i*b)>400){m=m-i*a;n=n-i*b;break;}}
for(;;){if(m>300)ball(m,n,-a,b,clip1);
if(m<0)ball(m,n,-a,b,clip1);
if(n>400)ball(m,n,a,-b,clip1);
if(n<0)ball(m,n,a,-b,clip1);
goto MOVE;}
}
happycock 2003-07-17
  • 打赏
  • 举报
回复
晕啊,好长好长,我以后还是拜托MATLAB好了
cdocument 2003-07-17
  • 打赏
  • 举报
回复
矩阵:
Matrix Inversion using
LU Decomposition from
Numerical Recipes in C
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define TINY 1.0e-20

void inverse(double**,int);
void ludcmp(double**, int, int*, double*);
void lubksb(double**, int, int*, double*);
double **matrix(int,int,int,int);
double *vector(int,int);
void free_matrix(double**,int,int,int,int);
void free_vector(double*,int,int);

void inverse(double **mat, int dim)
{
int i,j,*indx;
double **y,d,*col;

y = matrix(0,dim-1,0,dim-1);
indx = (int *)malloc((unsigned)(dim*sizeof(int)));
col = vector(0,dim-1);
ludcmp(mat,dim,indx,&d);
for (j=0;j<dim;j++)
{
for (i=0;i<dim;i++) col[i] = 0.0;
col[j] = 1.0;
lubksb(mat,dim,indx,col);
for (i=0;i<dim;i++) y[i][j] = col[i];
}
for (i=0;i<dim;i++)
for (j=0;j<dim;j++)
mat[i][j] = y[i][j];
free_matrix(y,0,dim-1,0,dim-1);
free_vector(col,0,dim-1);
free(indx);
}

void ludcmp(double **a, int n, int *indx, double *d)
{
int i,imax,j,k;
double big,dum,sum,temp;
double *vv;

vv = (double*)malloc((unsigned)(n*sizeof(double)));
if (!vv)
{
fprintf(stderr,"Error Allocating Vector Memory\n");
exit(1);
}
*d = 1.0;
for (i=0;i<n;i++)
{
big = 0.0;
for (j=0;j<n;j++)
{
if ((temp=fabs(a[i][j])) > big) big = temp;
}
if (big == 0.0)
{
fprintf(stderr,"Singular Matrix in Routine LUDCMP\n");
for (j=0;j<n;j++) printf(" %f ",a[i][j]); printf("/n");
exit(1);
}
vv[i] = 1.0/big;
}
for (j=0;j<n;j++)
{
for (i=0;i<j;i++)
{
sum = a[i][j];
for (k=0;k<i;k++) sum -= a[i][k] * a[k][j];
a[i][j] = sum;
}
big = 0.0;
for (i=j;i<n;i++)
{
sum = a[i][j];
for (k=0;k<j;k++) sum -= a[i][k] * a[k][j];
a[i][j] = sum;
if ((dum=vv[i]*fabs(sum)) >= big)
{
big = dum;
imax = i;
}
}
if (j != imax)
{
for (k=0;k<n;k++)
{
dum = a[imax][k];
a[imax][k] = a[j][k];
a[j][k] = dum;
}
*d = -(*d);
vv[imax] = vv[j];
}
indx[j] = imax;
if (a[j][j] == 0.0) a[j][j] = TINY;
if (j != n-1)
{
dum = 1.0 / a[j][j];
for (i=j+1;i<n;i++) a[i][j] *= dum;
}
}
free(vv);
}

void lubksb(double **a, int n, int *indx, double *b)
{
int i,ip,j,ii=-1;
double sum;

for (i=0;i<n;i++)
{
ip = indx[i];
sum = b[ip];
b[ip] = b[i];
if (ii>=0)
for (j=ii;j<i;j++) sum -= a[i][j] * b[j];
else if (sum) ii = i;
b[i] = sum;
}
for (i=n-1;i>=0;i--)
{
sum = b[i];
for (j=i+1;j<n;j++) sum -= a[i][j] * b[j];
b[i] = sum / a[i][i];
}
}
cdocument 2003-07-17
  • 打赏
  • 举报
回复
#include <graphics.h>
int a=10,b=10,m=300,n=400,i=1;
int speed=5000000;

ball(int m,int n,int p,int q,char *clip1)
{for(i=1;;i++)
{putimage(m-i*p,n-i*q,clip1,COPY_PUT);
delay(speed);
if((m-i*p)<0||(n-i*q)<0||(m-i*p)>300||(n-i*q)>400){m=m-i*p;n=n-i*q;a=p;b=q;break;}
}
}

main()
{int driver=DETECT,mode;
char *clip1;
initgraph(&driver,&mode," ");
setcolor(RED);
setfillstyle(SOLID_FILL,RED);
fillellipse(25,25,15,15);
clip1=malloc(imagesize(0,0,100,100));
getimage(0,0,100,100,clip1);
cleardevice();
setcolor(RED);
for(;;i++)
{putimage(m-i*a,n-i*b,clip1,COPY_PUT);
delay(speed);
if((m-i*a)<0||(n-i*b)<0||(m-i*a)>300||(n-i*b)>400){m=m-i*a;n=n-i*b;break;}}
for(;;){if(m>300)ball(m,n,-a,b,clip1);
if(m<0)ball(m,n,-a,b,clip1);
if(n>400)ball(m,n,a,-b,clip1);
if(n<0)ball(m,n,a,-b,clip1);
goto MOVE;
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧