当前位置:首页 » 编程语言 » c语言实现碰撞计算
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言实现碰撞计算

发布时间: 2023-02-08 07:53:16

A. c语言实现两小球碰撞

我没有TC,没办法画。说一下原理。
画两个圆,表示小球。
半径比k,半径r1,r2,
圆沿两条直线,速度v1,v2
时间步长dt
画圆:
loop:
setcolor(WHITE); // 绘图色
circle(x1, y1, r1);
circle(x2, y2, r2);
停0.05秒
setcolor(BLUE); // 背景色
circle(x1, y1, r1);
circle(x2, y2, r2);
更新x1, y1,x2, y2
goto loop;

画直线用:
line(int x0, int y0, int x1, int y1);

写字用
settextstyle(1, 0, 0);
outtextxy(120, 120, "Very Good");

---------------------------------
#include<stdio.h>
#include<math.h>
#include<graphics.h>

int main()
{
int gdirver, gmode;
gdriver=DETETC;
initgraph(&gdriver, &gmode, "");
setbkcolor(BLUE); // 设屏幕底色
cleardevice();
画圆:
loop:
setcolor(WHITE); // 绘图色
circle(x1, y1, r1); // 画新圆
circle(x2, y2, r2);
停0.05秒
setcolor(BLUE); // 用背景色涂掉圆
circle(x1, y1, r1);
circle(x2, y2, r2);
更新x1, y1,x2, y2
判断相碰,是碰则 break;
goto loop;
用上面方法画碰后的圆,区别在于
更新x1, y1,x2, y2
getch();
closegraph();
}

B. C语言编程:两小球动态碰撞(键盘控制碰撞次数)

easy~~~~
--------------------
int n;
scanf("%d",&n);
for (int j=0; j<n; j++)
{
for(i=0; i<185; i++)
{
putimage(70+i, 170, buf, COPY_PUT); /*左边球向右运动*/
putimage(500-i, 170, buf, COPY_PUT); /*右边球向左运动*/
}
for(i=0;i<185; i++)
{
putimage(255-i, 170, buf, COPY_PUT);

putimage(315+i, 170, buf, COPY_PUT);
}
}

C. 走迷宫的游戏,怎样判断人物与障碍物碰撞,(c语言).各位大虾,帮帮忙了,我想多参考一下

int map[32][42]={
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1},
{1,1,1,1,0,0,1,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1},
{1,1,1,1,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1},{0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1},
{0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1},
{0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1},
{0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1},
{0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1},
{0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,1},
{0,1,1,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1},
{0,1,1,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1},
{0,1,1,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1},
{0,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,1},
{0,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1},
{0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1},
{0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1},
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1},
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,1},
{0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1},
{0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1},
{0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1},
{0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1},
{0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,1},
{0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,1},
{0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1},
{0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1},
{0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,1},
{0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0},
{0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1},
{0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1}
};
void Welcome()
{
setcolor(BLUE);
rectangle(150,165,507,390);
rectangle(145,160,512,395);
settextjustify(CENTER_TEXT,TOP_TEXT);
setcolor(GREEN);
settextstyle(0,0,4);
outtextxy(320,120+16*4,"GoGoGo");
setcolor(RED);
settextstyle(0,0,2);
outtextxy(320,120+16*10,"Huang Xin Ping");
setcolor(WHITE);
settextstyle(0,0,2);
outtextxy(320,120+19*10,"QQ:77967292");
setcolor(WHITE);
settextstyle(0,0,2);
outtextxy(327,127+21*10,"Email:[email protected]");
setcolor(RED);
settextstyle(0,0,2);
outtextxy(320,120+24*10,"My Teacher:Lei Jue");
bioskey(0);
cleardevice();
}
void Happy()
{
char str[8]={10,20,30,40,50,60,70,80};
int i;
struct fillsettingstype save;
setbkcolor(BLUE);
cleardevice();
for(i=0;i<13;i++)
{
setcolor(i+3);
setfillstyle(i,2+i);
bar(100,150,200,50);
bar3d(300,100,500,200,70,1);
pieslice(200, 300, 90, 180, 90);
sector(500,300,180,270,200,100);
delay(100000);
}
bioskey(0);
cleardevice();
}
void DrawBlock(int x,int y,int color)
{
int m,n,i;
setbkcolor(BLACK);
setcolor(BLACK);
setfillstyle(XHATCH_FILL,color );
fillellipse(10*x+65,10*y+65,8,8);
setcolor(DARKGRAY);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
for(i=50;i<=545;i+=10)
{
rectangle(i,40,i+10,49);
rectangle(i,441,i+10,432);
}
for(i=40;i<=431;i+=10)
{
rectangle(50,i,59,i+10);
rectangle(560,i,550,i+10);
}
setlinestyle(DOTTED_LINE,0,THICK_WIDTH);
for(m=0;m<41;m++)
{
for(n=0;n<32;n++)
{
if(map[n][m]==0)
{
setcolor(LIGHTGRAY);
rectangle(12*m+61,12*n+52,12*m+67,12*n+57);
}
}
}
}
enum direct{Left,Up,Right,Down};
enum bool{False,True};
enum bool Moveable(int x,int y,enum direct dir)
{
switch(dir)
{
case Left:
if(x>0) return True;
break;
case Up:
if(y>0) return True;
break;
case Right:
if(x<490/10-1)return True;
break;
case Down:
if(y<365/10-1)
return True;
}
return False;
}
void MoveBlock(int*x,int*y,enum direct dir)
{
DrawBlock(*x,*y,BGCOLOR);
switch(dir)
{
case Left:
(*x)--;break;
case Up:
(*y)--;break;
case Right:
(*x)++;break;
case Down:
(*y)++;break;
}
delay(5000);
DrawBlock(*x,*y,FORECOLOR);
}
void Welcome();
void Happy();
void Close();
void Prscore();
void Drawmap();
void GameOver();
void DrawBlock();
void Name();
void Bangquan();
void Time();

void main()
{
int x=0,y=0;
int key;
enum bool fGameOver=False;
int driver=VGA,graphmode=VGAHI;
initgraph(&driver,&graphmode,"c:\\turboc2");
settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
Welcome();
Happy();
Prscore();
Name();
Bangquan();
Time();
Drawmap();
DrawBlock(x,y,FORECOLOR);
for(;;)
{
if(bioskey(1)) key=bioskey(0);
else key=0;
switch(key)
{
case VK_LEFT:
if(Moveable(x,y,Left))
MoveBlock(&x,&y,Left);times--;Prscore();
break;
case VK_RIGHT:
if(Moveable(x,y,Right))
MoveBlock(&x,&y,Right);times--;Prscore();
break;
case VK_UP:
if(Moveable(x,y,Up))
MoveBlock(&x,&y,Up);times--;Prscore();
break;
case VK_DOWN:
if(Moveable(x,y,Down))
MoveBlock(&x,&y,Down);times--;Prscore();
break;
case VK_ESC:
fGameOver=True;
clrscr();
GameOver();
}
if(fGameOver)
break;
}
Close();
}
void GameOver()
{
setbkcolor(BLACK);
setcolor(RED);
settextstyle(0,0,4);
outtextxy(320,20+16*10,"GAME OVER!");
setcolor(GREEN);
settextstyle(0,0,3);
outtextxy(320,70+16*10,"ji xu nu li!");
setcolor(WHITE);
circle(300,330,40);
setcolor(WHITE);
circle(317,320,6);
setcolor(WHITE);
circle(280,320,6);
setcolor(WHITE);
arc(300,340,220,360,15);
bioskey(0);
cleardevice();
}
void Prscore()
{
char str[10];
setfillstyle(SOLID_FILL,YELLOW);
bar(50,15,560,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"Times:%d",times);
outtextxy(120,20,str);
}
void Drawmap()
{
}
void Name()
{
char str[20];
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"Name:%s",name);
outtextxy(480,20,str);
}
void Bangquan()
{
char quan[20];
setcolor(6);
settextstyle(0,0,1);
sprintf(quan,"Author:%s",bangquan);
outtextxy(290,18,quan);
}
void Time()
{
char tim[20];
setcolor(6);
settextstyle(0,0,1);
sprintf(tim,"Time:%ld",time);
outtextxy(290,28,tim);
}
void Close()
{
closegraph();
}

D. 如何用c语言实现两运动物体碰撞后其中一个不动 另一个被弹开的程序

将动量、能量和摩擦力等因素考虑进去,先把函数关系列出来,然后再用C语言计算结果,把结果画出来就行了。

E. 如何用c语言编写三个小球碰撞的程序,第一个小球碰撞第二个小球后立即停止运动,第二个开始运动...

我擦 等我回去修炼几年 再来做这题

F. 如何用c语言编写一个三个小球碰撞的程序啊

#include <stdio.h>
#include <graphics.h>
int main()
{
int i,j,gdriver,gmode,size;
void *buf;
gdriver=DETECT;
initgraph(&gdriver,&gmode,"d:\\tc2\\bgi");
setbkcolor(BLUE);
cleardevice();
setcolor(LIGHTRED);
setlinestyle(0,0,1);
setfillstyle(1,10);
circle(31,200,30);
floodfill(31,200,12);
size=imagesize(0,169,62,231);
buf=malloc(size);
getimage(0,169,62,231,buf);
putimage(500,269,buf,COPY_PUT);
putimage(320,170,buf,COPY_PUT);

while(1)
{
for(j=0;j<4;j++)
for(i=0;i<260;i++)
{
if(kbhit()) {closegraph();exit(0);}
switch(j)
{
case 0:
putimage(i,170,buf,COPY_PUT);
break;
case 1:
putimage(321+i,170,buf,COPY_PUT);
break;
case 2:
putimage(581-i,170,buf,COPY_PUT);
break;
case 3:
putimage(260-i,170,buf,COPY_PUT);
break;
}
}
}
}

G. 用C语言设计:两个小球碰撞的物理特性

判断两个球的圆心之间的距离是否小于两半径之和就可以了,如果小于则碰撞.

H. 用C语言编程2小球在屏幕上随机碰撞,能给代码的最好,事后重谢!

你的程序有三个错误:
1.
main
应改为
main()

2.
scanf("%d%d",a,b);
应改为
scanf("%d%d",&a,&b);

3.
sum=a+b; 应该写在scanf("%d%d",&a,&b);的后面

程序修改如下:

#include<stdio.h>
main()
{
int a,b,sum;
scanf("%d%d",&a,&b);
sum=a+b;
printf("sum is %d",sum);
}

一个更标准的程序如下:

#include<stdio.h>
int main(void)
{
int a,b,sum;
scanf("%d%d",&a,&b);
sum=a+b;
printf("sum is %d",sum);
return 0;
}

**********************************************
#include<stdio.h>

int main(void)
{
float a,b;
scanf("%f%f",&a,&b);
printf("%g+%g=%g",a,b,a+b);
return 0;
}

I. c语言三维碰撞的算法

我是这样想的,先判断两个物体是否接触,如果相互接触,则先把两个物体的速度按x,y,z方向分解,然后对应的方向上,运用动量守恒,能量守恒,决定碰撞后的速度,然后在把得到的x,y,z方向上的速度进行合成就行了。

J. 用c语言编写小球动态碰撞的程序

你是想用OpenGl还是Direct Draw的图形开发库。