package solar;

import util.GameUtil;

import java.awt.*;

/**

  • 星球的共同属性
    */
    public class Star {//Star星
    Image img;
    double x,y;
    int width,height;

    //创建方法 :draw画;Graphics制图
    public void draw(Graphics g){//画图
    g.drawImage(img,(int)x,(int)y,null);

    }
    //2:创建空构造器
    public Star() {
    }
    //4:
    public Star(Image img) {
    this.img = img;
    //这样也可以
    this.width = img.getWidth(null);
    this.height = img.getHeight(null);
    }
    //创建构造器 加载星图片
    public Star(Image img, double x, double y) {
    this(img);//这样也可以
    //this.img = img;
    this.x = x;
    this.y = y;
    }
    //获取图片路径 用这个
    public Star(String imgpath,double x,double y){

     this(GameUtil.getImage(imgpath),x,y);
    

    }

    /public Star(Image img, double x, double y, int width, int height) {
    this.img = img;
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
    }
    /
    }
    //-----------------------------------------------------------
    package solar;

import util.GameUtil;

import java.awt.*;

/**

  • Planet行星
    */
    public class Planet extends Star{//提示增加构造器
    //行星自己还有特点; 行星有椭圆运行,长轴,短轴,速度;围绕某个星球运行
    Star center;//围绕某个星球运行;center中心
    double longAxis;//椭圆长轴
    double shortAxis;//椭圆短轴
    double speed;//速度
    double degree;//角度
    //5:
    boolean satellite;//satellite卫星

    //3:这里重写父类方法;Star()父类里有,这里需重写;
    //5:
    public void draw(Graphics g) {
    //4: g.drawImage(img, (int) x, (int) y, null);//强制转型
    super.draw(g);
    //5:x , y;移到move类//沿着椭圆轨迹飞行
    /* x = (center.x + center.width / 2) + longAxis * Math.cos(degree);
    y = (center.y + center.height / 2) + shortAxis * Math.sin(degree);
    //每次循环后变量逐渐增加
    degree += speed;
    */
    move();//调用
    //5:加判断
    if(!satellite){
    drawTrace(g);
    }

    }

    //4:Trace轨迹
    public void drawTrace(Graphics g){
    double x2,y2,width2,height2;//椭圆的变量
    //算坐标
    width2 = longAxis2;
    height2 = shortAxis
    2;
    x2 = (center.x+center.width/2) - longAxis;
    y2 = (center.y+center.height/2)-shortAxis;

     //设颜色Color c = g.getColor();//原来的颜色g.setColor(Color.blue);//蓝色g.drawOval((int)x2,(int)y2,(int)width2,(int)height2);//需要强转g.setColor(c);
    

    }
    //4:创建新的方法;move 移动
    public void move(){
    //沿着椭圆轨迹飞行
    x = (center.x+center.width/2)+longAxisMath.cos(degree);
    y = (center.y+center.height/2)+shortAxis
    Math.sin(degree);
    //每次循环后变量逐渐增加
    degree += speed;
    }
    //2:给上面属性创建构造器;
    public Planet(Star center,String imgpath, double
    longAxis, double shortAxis, double speed) {
    super(GameUtil.getImage(imgpath));//super上级

     this.center = center;this.x = center.x+longAxis;//this.y = center.y;this.longAxis = longAxis;this.shortAxis = shortAxis;this.speed = speed;this.width = img.getWidth(null);this.height = img.getHeight(null);
    

    }
    //5:添加卫星后的构造器
    public Planet(Star center,String imgpath, double longAxis,
    double shortAxis, double speed,boolean satellite) {
    this(center, imgpath, longAxis, shortAxis, speed);
    this.satellite = satellite;
    }
    //5:创建构造器
    public Planet(Image img, double x, double y) {
    super(img, x, y);
    }
    //5:创建构造器
    public Planet(String imgpath, double x, double y) {//直接调用父类
    super(imgpath, x, y);//super上级
    }
    }
    //---------------------------------------------------------
    package solar;

import util.Constant;
import util.GameUtil;
import util.MyFrame;

import java.awt.*;

/**

  • 太阳系主窗口
    */
    public class SolarFrame extends MyFrame {
    Image bg = GameUtil.getImage(“images/bg.jpg”);
    // 创建太阳对象;调用Constant常量类;Constant.GAME_WIDTH/2, Constant.GAME_HEIGHT/2:中心点
    Star sun = new Star(“images/sun.jpg”, Constant.GAME_WIDTH/2,Constant.GAME_HEIGHT/2);
    //earth地球
    Planet earth = new Planet(sun,“images/earth.jpg”, 150, 100, 0.1);
    //5:给地球添加卫星
    Planet moon = new Planet(earth,“images/moon.jpg”, 15, 30, 0.07,true);//去掉轨迹

    //5:添加行星 mars火星
    Planet mars = new Planet(sun,“images/Mars.jpg”, 200, 130, 0.09);
    //按照离太阳的距离从近到远,它们依次为水星、金星、地球、火星、木星、土星、天王星、海王星。八大行星
    //6:水星
    Planet mercury = new Planet(sun,“images/mercury.jpg”, 100, 60, 0.2);
    //6:金星
    Planet venus = new Planet(sun,“images/venus.jpg”, 130, 80, 0.15);
    //6:木星
    Planet jupiter = new Planet(sun,“images/jupiter.jpg”, 220, 160, 0.08);
    //6:土星
    Planet saturn = new Planet(sun,“images/saturn.jpg”, 250, 200, 0.07);
    //6:天王星
    Planet uranus = new Planet(sun,“images/uranus.jpg”, 280, 220, 0.06);
    //6:海王星
    Planet neptune = new Planet(sun,“images/neptune.jpg”, 300, 250, 0.05);

    public void paint(Graphics g) {
    g.drawImage(bg, 0, 0, null);// 背景
    sun.draw(g);// 把背景传进去
    earth.draw(g);

     //5:调用mars.draw(g);moon.draw(g);//6:mercury.draw(g);venus.draw(g);jupiter.draw(g);saturn.draw(g);uranus.draw(g);neptune.draw(g);
    

    }
    public static void main(String[] args) {
    new SolarFrame().launchFrame();

    }

}

//---------------------------------------

java 太阳系模型练习3-- 行星运行轨迹练习相关推荐

  1. HTML+CSS 绘制太阳系各个行星运行轨迹

    模拟宇宙太阳系 <!DOCTYPE html> <html lang="en"> <head><meta charset="UT ...

  2. CSS 绘制太阳系各个行星运行轨迹

    效果图 原理 行星沿着自身轨道旋转. 设置盒子,宽高均为800px,采用相对定位. 太阳绝对定位到盒子中间. 地球轨道盒子,宽高250px为圆形,背景色透明,加一个灰色边框,就是地球轨道, 绝对定位, ...

  3. 太阳系行星运行轨道图,C语言,源代码分享

    [精选]太阳系八大行星运转轨迹程序,C语言,源代码分享 目录 [精选]太阳系八大行星运转轨迹程序,C语言,源代码分享 程序展示 一.项目环境 简单介绍一下easyx图形库 Easyx图形库 二.运行效 ...

  4. 天体运行轨迹_海王星轨道外发现139个新天体, 能揭开太阳系第九颗行星奥秘?...

    美国天体物理学家在距太阳最远的海王星轨道外发现139个新天体 有助揭开太阳系第九颗行星奥秘 (神秘的地球uux.cn报道)据东网:自天文学家把冥王星降格为矮行星后,太阳系只余下八大行星.美国有天体物理 ...

  5. 用java画太阳图_使用Java制作太阳系模型(3)

    开发工具与关键技术:MyEclipse 10.JAVA 作者:曾浩源 撰写时间:2019年04月22日 做任何程序都离不开良好的封装,封装好自己代码,到时候传变量到方法,即可一步到位.像太阳系,虽然它 ...

  6. HTML+CSS绘制太阳系九大行星运行轨迹

    HTML+CSS绘制太阳系九大行星运行轨迹 最近正在菜鸟教程学习前端的相关知识,学习过程中发现这个项目比较有趣且知识涵盖比较多,所以就写篇博客记录一下,方便以后查看.这是我第一次写技术博客,如遇有缘人 ...

  7. java编写太阳_java绘图--太阳系模型

    java绘图在工作中使用的并不是很多,但是从这种小程序中用到很多基本知识和编程理念,最重要的是,可以很快的看到效果,体会到学习java的乐趣,不像C语言那样,学了很久却不知道学了有什么用,在枯燥的学习 ...

  8. js制作的炫酷3D太阳系行星运行效果

    想象着打开网页就能浏览太阳系行星的运行情况,促进我们更好的了解这个宇宙星空,于是找到了这样一段代码可以完美的实现这个功能,通过css和js就可以实现在网页上展示一个完美的太阳系行星的运行情况,效果炫酷 ...

  9. 天体运行轨迹_太阳系内天体的运行轨迹是什么?开普勒为什么这么伟大?

    哥白尼的日心说在近代科学发展史上具有重大的革命意义.但由于受到历史条件的限制,这一理论也存在着不可避免的缺点和错误.臂如说,哥白尼认为行星运动的轨道是圆形的,因为轨道应当是"完美的" ...

最新文章

  1. FPGA(1)基础入门 -- 按键控制led灯
  2. 求解线性最小二乘问题的奇异值分解及广义逆法的C++实现
  3. 国学早教视频 16G
  4. 开学测试代码——需求征集系统
  5. C# -- 多线程向同一文件写入
  6. ios如何获取gps坐标(定位第二节)
  7. linux shell脚本链接操作符,Shell脚本中的操作符
  8. activemq中怎么知道推送消息是否成功_消息队列面试,你能顶得住面试官这波10大连环炮的攻势吗?...
  9. 录像机CIF、D1、720P、960P、1080P分辨率及硬盘所占空间
  10. 计算机网络原理(04741)第1章:计算机网络概述
  11. android 使用adb命令安装安卓apk包
  12. 市政管理学(试题及答案)汇总
  13. 【RabbitMQ】SpringBoot的RabbitMQTemplate实战
  14. vue项目报错[Vue warn]: Property “visible“ must be accessed with “$data.visible“ because properties start
  15. 清北学堂2018noip集训D1
  16. ios逆向工具 theos tweak多文件使用方法
  17. oracle 按照中文姓首字母排序,按照偏旁部首,笔画排序 sql
  18. html怎么设置左侧内边距,CSS 内边距(Padding)
  19. linux下github上传文件,linux下将本地文件上传到github中?
  20. 端到端与点到点的区别

热门文章

  1. 下面为子代选择器结合符的是_奥鹏2014秋福建师范大学《语言学概论》在线作业一答案...
  2. 中级软考证书有什么作用?
  3. 【基础算法】开平方算法 C++实现
  4. 用Python轻松生成二维码,让生活更便捷!
  5. 【操作系统】分段存储管理方式
  6. 大学英语四六级准考证号找回最新教程!
  7. 给大家推个社群管理软件?
  8. 硬件钱包linux安装,使用Trezor硬件钱包管理Omni版USDT教程
  9. 计算机绘图课程绘图模式主要有,关于“计算机绘图”课程教学研究的探索
  10. 淘集集打单软件那个好?那个打单软件能批量打单?