为更好解决繁花曲线绘制问题,由java编写进行输出动点轨迹方程的具体坐标,形成繁花曲线,其基本思路为
第一步:求小圆圆心坐标
小圆圆心的公转轨迹是一个半径为 r1- r2 的圆,求小圆圆心坐标,相当于是求半径为 r1- r2 的圆上θ 弧度对应的点的坐标。
圆上的点的坐标公式为:
x = r * cos(θ), y = r * sin(θ)
小圆圆心坐标为:( xa+ (r1 - r2) * cos(θ), ya + (r1 - r2) * sin(θ) )
第二步:求小圆自转弧度
设小圆自转弧度为α,小圆紧贴大圆运动,两者走过的路程相同,因此有:
r1 *θ = r2 *α
小圆自转弧度α = (r1 / r2) *θ
第三步:求点C坐标
点C相对小圆圆心B的公转轨迹是一个半径为 Rc 的圆,类似第一步,有:
轨迹点C的坐标为:( xa+ rc* cos(θ), ya+ rc* sin(θ))
其中,为简化模型,定义大圆圆心位于原点,即xa=ya=0;
首先,先求内切圆中动点轨迹方程,由于题中给的条件是时间,因此设角速度为w,则弧度就应该等于wt,其中ra,rb,k由题意给出,可直接在程序修改,可得到一系列轨迹动点,进行绘图
下面,对代码进行解释,首先,main内部有一个工具方法get_center_in_circle,对这个方法进行重写,当输入get_center_in_circle(double r,double radian_out,int i),三个参数时,返回的是小圆的轨迹点,double r为小圆圆心距大圆的距离,根据是内切圆还是外切圆可得不同的值 ,当是内切圆时r=ra-rb,外切圆时r=ra+rb,double radian_out 参数是大圆在一定时间下转过的弧度,int i是判断返回x坐标还是y坐标,为1时返回x,其余返回y。
当输入get_center_in_circle(double ra,double rb,double radian_out,double xb,double yb,double rc)为6个参数时,返回的是动点的轨迹坐标,前三个参数是给出参数,double xb,double yb两个参数是通过上一个工具方法得到的参数,指的是小圆圆心的轨迹坐标,double rc参数由给出的比例系数确定rc=rb*k,指的是动点距小圆圆心的距离。
在main()函数里得到动点轨迹坐标后,将数据更新,进行循环:
t++;
radian_out=w*t;
更新时间使绘图继续。
package MathModeling;
import java.util.ArrayList;
import java.util.List;
public class InFindTrail {
public static double ra=17.0;//大圆半径
public static double rb=13.0;//小圆半径
public static double k=0.5;//比例系数
static double xa;//大圆坐标
double ya;//大圆坐标
static double xb;//小圆坐标
static double yb;//小圆坐标