写在前面:

  高考结束咧,爽到啊,好耶

  完善了Java 窗口 绘制图形 #1里面的程序

  加入了缩放平移功能,给代码加了注释

  1 package my_package;
2
3 import java.awt.*;
4 import java.awt.Graphics;
5 import java.awt.event.MouseAdapter;
6 import java.awt.event.MouseEvent;
7 import java.awt.event.MouseMotionAdapter;
8 import java.awt.event.MouseWheelEvent;
9 import java.awt.event.MouseWheelListener;
10 import java.io.*;
11 import javax.swing.JFrame;
12 import javax.swing.JPanel;
13
14 public class PonysAlgorithm extends JFrame
15 {
16 private static final long serialVersionUID = 1L;
17 static int pony_winx=800,pony_winy=600;//窗口的长和宽
18 static double c_Pi=3.1415926f;//常数π
19 static int pony_scale=80;//窗口缩放变量
20 static int pony_x0=pony_winx/2,pony_y0=pony_winy/2;//坐标原点
21 static int pony_x0_tmp,pony_y0_tmp;//坐标原点随鼠标移动变化辅助变量
22 static int pony_precision=1000;//绘制时的精度
23 static int pony_framex_ori,pony_framey_ori;//鼠标移动辅助变量
24
25 static double pony_x(double i){//i是参数,此处为x变量表达式
26 return i;
27 }
28 static double pony_y(double i){//i是参数,此处为y变量表达式
29 return (6*(2*Math.pow(i, 7)+Math.pow(i, 4)-i))/Math.pow((Math.pow(i , 6)+2*Math.pow(i, 3)+1), 2);
30 }
31
32 public static void main(String[] args) throws Exception
33 {
34 JFrame ponyFrame=new JFrame("Pony's Algorithm");
35 ponyFrame.setLayout(null);
36 JPanel ponyJPanel=new JPanel(){
37 private static final long serialVersionUID = 1L;
38
39 public void paint(Graphics g){
40 super.paint(g);
41
42 g.setColor(Color.GRAY);
43 /*Coordinate Axis*/
44 g.drawLine(pony_x0, 0, pony_x0, pony_winy);//绘制y轴
45 g.drawLine(0, pony_y0, pony_winx, pony_y0);//绘制x轴
46
47 for(int i=pony_x0+pony_scale;i<=pony_winx;i+=pony_scale)//绘制x、y轴刻度
48 g.drawLine(i, pony_y0-5, i, pony_y0+5);
49 for(int i=pony_x0-pony_scale;i>0;i-=pony_scale)
50 g.drawLine(i, pony_y0-5, i, pony_y0+5);
51 for(int i=pony_y0+pony_scale;i<=pony_winy;i+=pony_scale)
52 g.drawLine(pony_x0-5, i, pony_x0+5, i);
53 for(int i=pony_y0-pony_scale;i>0;i-=pony_scale)
54 g.drawLine(pony_x0-5, i, pony_x0+5, i);
55
56 for(int i=1;pony_x0+i*pony_scale<pony_winx;++i)//绘制x、y轴刻度值
57 g.drawString(""+i, pony_x0+i*pony_scale-4, pony_y0+25);
58 for(int i=-1;pony_x0+i*pony_scale>0;--i)
59 g.drawString(""+i, pony_x0+i*pony_scale-4, pony_y0+25);
60 for(int i=1;pony_y0+i*pony_scale<pony_winy;++i)
61 g.drawString(""+(-i), pony_x0-25, pony_y0+i*pony_scale+4);
62 for(int i=-1;pony_y0+i*pony_scale>0;--i)
63 g.drawString(""+(-i), pony_x0-25, pony_y0+i*pony_scale+4);
64
65 /*CORE*/
66 int tmpa,tmpb;
67 g.setColor(Color.BLUE);
68 for(int i=-100000;i<=100000;++i)//参数i,通过参数i的变化绘制出参数方程图像
69 {
70 tmpa=(int)(pony_x(i/(double)pony_precision)*pony_scale)+pony_x0;
71 tmpb=(int)(-pony_y(i/(double)pony_precision)*pony_scale)+pony_y0;if(tmpb==0) continue;
72 g.drawLine(tmpa, tmpb, tmpa, tmpb);
73 }
74 }
75 };
76
77 /*Whole*/
78 ponyFrame.setSize(pony_winx,pony_winy);
79 ponyFrame.setResizable(false);
80 ponyFrame.setLocationRelativeTo(null);
81 ponyFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
82
83 /*ICON*/
84 File directory = new File("");
85 ponyFrame.setIconImage(Toolkit.getDefaultToolkit().getImage(directory.getCanonicalPath()+"\\icons\\32.png"));
86
87 /*DRAW*/
88 ponyJPanel.setBounds(2, 2, pony_winx-10, pony_winy-10);
89 ponyFrame.add(ponyJPanel);
90 ponyFrame.addMouseListener(new MouseAdapter() {//当鼠标键按下并移动时,记录变量
91 @Override
92 public void mousePressed(MouseEvent e) {
93 pony_framex_ori=e.getXOnScreen();
94 pony_framey_ori=e.getYOnScreen();
95 pony_x0_tmp=pony_x0;
96 pony_y0_tmp=pony_y0;
97 }
98 });
99 ponyFrame.addMouseMotionListener(new MouseMotionAdapter() {//坐标原点的改变
100 @Override
101 public void mouseDragged(MouseEvent e) {
102 pony_x0=pony_x0_tmp+(e.getXOnScreen()-pony_framex_ori)/1;
103 pony_y0=pony_y0_tmp+(e.getYOnScreen()-pony_framey_ori)/1;
104 ponyJPanel.repaint();
105 }
106 });
107 ponyFrame.addMouseWheelListener(new MouseWheelListener() {//鼠标滚轮滚动时,对图像进行缩放
108 @Override
109 public void mouseWheelMoved(MouseWheelEvent e) {
110 if(e.getWheelRotation()==1) {
111 if(pony_scale>10) {
112 pony_scale-=1;
113 ponyJPanel.repaint();
114 }
115 }
116 if(e.getWheelRotation()==-1) {
117 pony_scale+=1;
118 ponyJPanel.repaint();
119 }
120 }
121 });
122
123 ponyFrame.setVisible(true);
124 return;
125 }
126 }

附件:

*jar所在目录*\\icons\\

32.png

Java 窗口 绘制图形 #2的更多相关文章

  1. Java 窗口 绘制图形 #3

    写在前面: 高数下学到第二章,突发奇想要写一个程序画二元函数图像 思路分了三层: ①抽象层: 因变量z,自变量x.y,坐标原点x0.y0.z0 ②投影实现层: 屏幕投影坐标px.py,x轴与屏幕水平方 ...

  2. Java 窗口 绘制图形 #1

    写在前面: editplus换成eclipse了 Sketchpad要钱,买不起 自己搞(rua) by emeralddarkness 建立了一个平面直角坐标系 两个变元x,y,参数i 实现了以下功 ...

  3. C# 在窗口绘制图形(打点、画圆、画线)

    需要包含命名空间 using System.Drawing; 画图前需要先创建画板 void Display() { Graphics g = this.CreateGraphics(); //创建画 ...

  4. Java 在PPT中绘制图形

    Microsoft PowerPoint可支持在幻灯片中插入各种类型的图形并且可设置图形填充.线条颜色.图形大小.位置等.下面将通过Java编程来演示在PPT中绘制图形的方法. 工具:Free Spi ...

  5. Java 在PDF文档中绘制图形

    本篇文档将介绍通过Java编程在PDF文档中绘制图形的方法.包括绘制矩形.椭圆形.不规则多边形.线条.弧线.曲线.扇形等等.针对方法中提供的思路,也可以自行变换图形设计思路,如菱形.梯形或者组合图形等 ...

  6. Java之绘制方法

    绘制图形所用的函数类别分别为视图类.图形单元类和页面类. 对视图类,设置窗口的位置和大小: 对图形单元类,设置图形边界: 对页面类,只有当页面作为元件,该函数才起作用,设置元件边界. 一般构建窗口我们 ...

  7. python中的turtle库绘制图形

    1. 前奏: 在用turtle绘制图形时,需要安装对应python的解释器以及IDE,我安装的是pycharm,在安装完pycharm后,在pycharm安装相应库的模块,绘图可以引入turtle模块 ...

  8. 第58节:Java中的图形界面编程-GUI

    欢迎到我的简书查看我的文集 前言: GUI是图形用户界面,在Java中,图形用户界面我们用GUI表示,而GUI的完整英文为: Graphical User Interface(图形用户接口), 所谓图 ...

  9. Win32知识之窗口绘制.窗口第一讲

    Win32知识之窗口本质 一丶摘要 在学习Win32的时候. 很多操作都是窗口进行操作的.那么今天就说一下窗口的本质是什么. 窗口的本质是不断绘制.是windows通过消息机制进行绘制的. 我们知道. ...

随机推荐

  1. DTCC 2020 | 阿里云李飞飞:云原生分布式数据库与数据仓库系统点亮数据上云之路

    简介: 数据库将面临怎样的变革?云原生数据库与数据仓库有哪些独特优势?在日前的 DTCC 2020大会上,阿里巴巴集团副总裁.阿里云数据库产品事业部总裁.ACM杰出科学家李飞飞就<云原生分布式数 ...

  2. Logrotate工具使用

    Logrotate ​ logrotate是一个被设计来简化系统管理日志文件的工具,在系统运行时,如果产生大量的日志文件,可以使用该工具进行管理,如/var/log/*文件夹是存储系统和应用日志的目录 ...

  3. k8s之ServiceAccount

    导读 上一篇说了k8s的RBAC授权模式,今天就来简单看一下其中涉及到的ServiceAccount. 简介 k8s创建两套独立的账号系统,原因如下: (1)User账号给用户用,Service Ac ...

  4. 【RAC】安装rac的时候。报错checking for oracle home incompatibilities failed

    背景:由于oracle安装的时候中途出现了问题,解决过后,发现报错了 图形化安装的时候,有这个问题出现 解决办法: 删除安装过的所有缓存,和文件即可 1.删除ORACLE_BASE下的所有文件 2.删 ...

  5. 【Oracle】增量备份和全库备份怎么恢复数据库

    1差异增量实验示例 1.1差异增量备份 为了演示增量备份的效果,我们在执行一次0级别的备份后,对数据库进行一些改变. 再执行一次1级别的差异增量备份: 执行完1级别的备份后再次对数据库进行更改: 再执 ...

  6. mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String

    犯了一个低级的错误,在传集合类型的参数时,把他当成字符串处理了,导致报类型转换的错误 把  and nsrsbh!=' ' 删掉就行了

  7. 在nodejs中创建child process

    目录 简介 child process 异步创建进程 同步创建进程 在nodejs中创建child process 简介 nodejs的main event loop是单线程的,nodejs本身也维护 ...

  8. 初次使用Open Live Writer

    关于下载和配置 建议大家不要在官网下载,会出不来.华军软件园(或其他下载站)也提供Open Live Writer最新版的下载. 创建账户时千万不要写错地址,错一个就失败. 体验 体验还是很好的,美中 ...

  9. 【故障公告】K8s CofigMap 挂载问题引发网站故障

    今天凌晨我们用阿里云服务器自建的 kubernetes 集群出现突发异常情况,博客站点(blog-web)与博客 web api(blog-api)的 pod 无法正常启动(CrashLoopBack ...

  10. MySQL主从复制配置部署

    配置前准备:安装MySQL   MySQL在centOS上的安装传送门: 1.集群规划 hadoop105 hadoop106 hadoop107 MySQL(master) MySQL(slave) ...