写在前面:

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

  完善了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. 【JavaWeb】JSON 文件

    JSON 文件 什么是 JSON JSON(JavaScript Object Notation),即 JS 对象符号. 是一种轻量级(相对于 XML 来说)的数据交换格式,易于阅读和编写,同时也易于 ...

  2. 电子邮箱、邮件地址、网站地址正则表达式!几个有用的RE、regex、regexp!

    几个常用的正则表达式! r"\w[-\w\.]*@\w[-\w]*(\.\w[-\w]*)+" 这个是电子邮件地址的. r"<TAG\b[^>]*<(. ...

  3. go语言循环变量

    阅读go语言圣经第五章第六节介绍到了捕获迭代变量 package main import ( "fmt" ) func main() { var lis []func() for ...

  4. SW3516中文资料书

    SW3516 是一款高集成度的快充车充芯片, 支持 A+C 口任意口快充输出, 支持双口独立限流.其集成了 5A 高效率同步降压变换器, 支持 PPS/PD/QC/AFC/FCP/SCP/PE/SFC ...

  5. Python爬虫:数据分析小能手:JSON库的用法

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. 给大家推荐一个Python交流的q裙,大家在学习遇到了什么问题都可以进群一起交流,大家 ...

  6. 试玩 GOWOG ,初探 OpenAI(使用 NeuroEvolution 神经进化)与 Golang 多人在线游戏开发

    GOWOG: 原项目:https://github.com/giongto35/gowog 我调整过的:https://github.com/Kirk-Wang/gowog GOWOG 是一款迷你的, ...

  7. Mybatis plus通用字段自动填充的最佳实践总结

    在进行持久层数据维护(新增或修改)的时候,我们通常需要记录一些非业务字段,比如:create_time.update_time.update_by.create_by等用来维护数据记录的创建时间.修改 ...

  8. ubuntu qt5.8 编译qtwebkit

    qtwebkit- 下载地址:http://download.qt.io/community_releases/5.8/5.8.0-final/ 问题一 出现如下错误 解决方法   sudo apt- ...

  9. Model(metaclass=ModelBase)

    Python装饰器.metaclass.abc模块学习笔记 - 王智愚 - 博客园 https://www.cnblogs.com/Security-Darren/p/4094959.html dja ...

  10. 从源码解析Nginx对 Native aio支持_运维_youbingchen的博客-CSDN博客 https://blog.csdn.net/youbingchen/article/details/51767587

    从源码解析Nginx对 Native aio支持_运维_youbingchen的博客-CSDN博客 https://blog.csdn.net/youbingchen/article/details/ ...