三体c语言程序,C语言练习实例65

C语言练习实例65

题目:一个最优美的图案(在TC中实现)。

程序分析:无。

程序源代码:

//  Created by www.santii.com on 16/06/08.

//  Copyright © 2015年 三体教程. All rights reserved.

//

#include "graphics.h"

#include "math.h"

#include "dos.h"

#include "conio.h"

#include "stdlib.h"

#include "stdio.h"

#include "stdarg.h"

#define MAXPTS 15

#define PI 3.1415926

struct PTS {

int x,y;

};

double AspectRatio=0.85;

void LineToDemo(void)

{

struct viewporttype vp;

struct PTS points[MAXPTS];

int i, j, h, w, xcenter, ycenter;

int radius, angle, step;

double rads;

printf(" MoveTo / LineTo Demonstration" );

getviewsettings( &vp );

h = vp.bottom - vp.top;

w = vp.right - vp.left;

xcenter = w / 2; /* Determine the center of circle */

ycenter = h / 2;

radius = (h - 30) / (AspectRatio * 2);

step = 360 / MAXPTS; /* Determine # of increments */

angle = 0; /* Begin at zero degrees */

for( i=0 ; i

rads = (double)angle * PI / 180.0; /* Convert angle to radians */

points[i].x = xcenter + (int)( cos(rads) * radius );

points[i].y = ycenter - (int)( sin(rads) * radius * AspectRatio );

angle += step; /* Move to next increment */

}

circle( xcenter, ycenter, radius ); /* Draw bounding circle */

for( i=0 ; i

for( j=i ; j

moveto(points[i].x, points[i].y); /* Move to beginning of cord */

lineto(points[j].x, points[j].y); /* Draw the cord */

}

}

}

int main()

{

int driver,mode;

driver=CGA;mode=CGAC0;

initgraph(&driver,&mode,"");

setcolor(3);

setbkcolor(GREEN);

LineToDemo();

}

本文网址:http://www.santii.com/c/c-examples_ex65.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用极坐标计算三体问题的C语言代码: ```c #include <stdio.h> #include <math.h> #define G 6.67408E-11 //引力常数 //求两点之间的距离 double distance(double x1, double y1, double x2, double y2) { return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2)); } //求两点之间的角度 double angle(double x1, double y1, double x2, double y2) { return atan2(y2 - y1, x2 - x1); } //计算三体之间的引力 void gravity(double m1, double x1, double y1, double m2, double x2, double y2, double *fx, double *fy) { double r = distance(x1, y1, x2, y2); double a = angle(x1, y1, x2, y2); double f = G * m1 * m2 / pow(r, 2); *fx = f * cos(a); *fy = f * sin(a); } int main() { double m1 = 5.97E24; //地球质量 double m2 = 1.99E30; //太阳质量 double m3 = 7.34E22; //月球质量 double x1 = 147095000000; //地球到太阳的距离 double x2 = 0; //太阳的坐标为原点 double x3 = x1 + 384400000; //地球到月球的距离 double y1 = 0; double y2 = 0; double y3 = 384400000; double vx1 = 0; double vy1 = 30000; //地球绕太阳的速度 double vx2 = 0; double vy2 = 0; double vx3 = 0; double vy3 = vy1 + 1022; //月球绕地球的速度 double ax1, ay1, ax2, ay2, ax3, ay3; double fx12, fy12, fx13, fy13, fx23, fy23; double dt = 60; //时间步长 int n = 365 * 24 * 60 * 60 / dt; //模拟一年的时间 for (int i = 0; i < n; i++) { //计算引力 gravity(m1, x1, y1, m2, x2, y2, &fx12, &fy12); gravity(m1, x1, y1, m3, x3, y3, &fx13, &fy13); gravity(m2, x2, y2, m3, x3, y3, &fx23, &fy23); //计算加速度 ax1 = (fx12 + fx13) / m1; ay1 = (fy12 + fy13) / m1; ax2 = (-fx12 - fx23) / m2; ay2 = (-fy12 - fy23) / m2; ax3 = (fx13 + fx23) / m3; ay3 = (fy13 + fy23) / m3; //更新速度 vx1 += ax1 * dt; vy1 += ay1 * dt; vx2 += ax2 * dt; vy2 += ay2 * dt; vx3 += ax3 * dt; vy3 += ay3 * dt; //更新位置 x1 += vx1 * dt; y1 += vy1 * dt; x2 += vx2 * dt; y2 += vy2 * dt; x3 += vx3 * dt; y3 += vy3 * dt; printf("%f,%f,%f,%f,%f,%f,%f\n", x1, y1, x2, y2, x3, y3, distance(x1, y1, x3, y3)); } return 0; } ``` 在该代码中,我们使用极坐标来计算三体之间的引力,其中`distance()`函数用于计算两点之间的距离,`angle()`函数用于计算两点之间的角度,`gravity()`函数用于计算三体之间的引力,`main()`函数则用于模拟三体运动的过程。模拟过程中,我们使用欧拉法来计算物体的位置和速度,最后将计算得到的位置和距离输出到控制台上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值