Proj0 NBody 绘制太阳系| CS61B-Spring-2018

Planet.java

  • this:指当前类中的成员变量。注意,当传入的参数名与成员变量名重名时,一定需要使用this来表示成员变量(而非当前方法的参数)。

  • 使用了sublime文本编辑器,主要的原因是在IDEA里面必须整个项目所有文件都编译成功才能运行,但使用文本编辑器+命令行运行(javac和java)可以在项目的其他文件没有写完或编译成功的时候只运行其中的部分文件。

  • API:预先把这些复杂的操作写在一个函数里面,编译成一个组件(一般是动态链接库),随操作系统一起发布,并配上说明文档,程序员只需要简单地调用这些函数就可以完成复杂的工作,让编程变得简单有趣。这些封装好的函数,就叫做API(Application Programming Interface),即应用程序编程接口。说得更加通俗易懂一些,别人写好的代码,或者编译好的程序,提供给你使用,就叫做API。你使用了别人代码(或者程序)中的某个函数、类、对象,就叫做使用了某个API。

NBody.java 读取文件内容并绘图

  • 读取文件中的内容
BasicInDemo_input_file.txt文件内容
5
9.0
ketchup brass 5
In in = new In("BasicInDemo_input_file.txt");
int firstItemInFile = in.readInt();
double secondItemInFile = in.readDouble();
String thirdItemInFile = in.readString();
String fourthItemInFile = in.readString();
double fifthItemInFile = in.readDouble();

每次使用完read方法,下一次都自动读取下一个

  • string转double:Double.parseDouble(String类型变量)
  • 出现错误:编码GBK的不可映射字符。可以直接使用-encoding指令来为文件指定编码格式。例如 javac -encoding UTF-8 XXX.java
    Proj0 NBody 绘制太阳系| CS61B-Spring-2018_第1张图片
    哇好酷啊,proj0还准备了好多其他数据生成行星图
    N个地球

    N个地球太阳
    Proj0 NBody 绘制太阳系| CS61B-Spring-2018_第2张图片

StdDraw绘图

https://introcs.cs.princeton.edu/java/15inout/

  • 基本绘图命令
    StdDraw.line(x0,y0,x1,y1)
    绘制一条直线段,将点(x 0,y 0)与点(x 1,y 1)连接起来。
    StdDraw.point(x,y)
    绘制一个以点(x,y)为中心的点。默认坐标比例是单位平方(所有x-和y-坐标在0和1之间)。
    StdDraw.setXscale(x0,x1);
    StdDraw.setYscale(y0,y1);
    将图形坐标设置为在一个边界框内 ,该边界框的左下角为(x 0,y 0),而右上角为(x 1,y 1)。
  • PlotFilter.java将数据过滤为标准图形
  • FunctionGraph.java画函数
  • 绘制多边形与填充
    Proj0 NBody 绘制太阳系| CS61B-Spring-2018_第3张图片
  • 文字和颜色
  • 双缓冲
    调用启用双重缓冲enableDoubleBuffering()。这是一种图形技术,可以防止动画闪烁。所有的绘画发生在屏幕外的画布。只有当您调用show()时,您的绘图才会从屏幕外的画布复制到屏幕上的画布,并显示在标准绘图窗口中。此项目中不必理解,只需在获取完输入后调用,只要知道,如果不调用此函数,则任何尝试平滑动画的效果都将看起来很差而且闪烁
  • 计算机动画:快速显示静态图达到动画的目的
    Proj0 NBody 绘制太阳系| CS61B-Spring-2018_第4张图片
  • StdDraw.picture(x,y,filename)
    在画布上以(x,y)为中心以给定文件名(JPEG,GIF或PNG格式)绘制图像
  • 用户交互

提交至Github

  • $ git push origin
    上面命令表示,将当前分支推送到origin主机的对应分支。
    如果当前分支只有一个追踪分支,那么主机名都可以省略。

  • $ git push
    如果当前分支与多个主机存在追踪关系,那么这个时候-u选项会指定一个默认主机,这样后面就可以不加任何参数使用git push。

  • $ git push -u origin master
    上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。

  • 不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。

在第一次提交Lab2的时候,我使用的是$ git push -u origin master,本次提交的时候,先git add proj0,再git commit -m “proj0”,再 $ git push origin即可。

在git push的时候出过一次问题,主要是因为我之前直接在github中编辑了代码,导致origin与local master不一致,所以显示

$ git push -u origin master
To https://github.com/yiyikkk/cs61b-spring18.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/yiyikkk/cs61b-spring18.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

解决的方法是:先git pull origin master,把origin里的内容pull下来,一致之后再push。

Proj0 NBody 绘制太阳系| CS61B-Spring-2018_第5张图片
终于完成啦

GitHub地址

你可能感兴趣的:(CS61B)