写在前面:

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

  完善了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. LeetCode557 反转字符串中的单词 III

    给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" 输出: &q ...

  2. 【C++】《C++ Primer 》第十三章

    第十三章 拷贝控制 定义一个类时,需要显式或隐式地指定在此类型地对象拷贝.移动.赋值和销毁时做什么. 一个类通过定义五种特殊的成员函数来控制这些操作.即拷贝构造函数(copy constructor) ...

  3. 【Flutter】可滚动组件之ListView

    前言 它可以沿一个方向线性排布所有子组件,并且它也可以支持基于Sliver的延迟构建模型. 接口描述 ListView({ Key key, // 可滚动widget公共参数 Axis scrollD ...

  4. Python 中的面向接口编程

    前言 "面向接口编程"写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重要,甚至几乎所有的编程语言都需要,毕竟程序具有良好的扩展性.维护性谁都不能拒绝 ...

  5. 在 WPF 中使用 MahApps.Metro.IconPacks 提供的大量图标

    MahApps.Metro.IconPacks https://github.com/MahApps/MahApps.Metro.IconPacks 提供了大量的高质量的图标供WPF使用,极其方便. ...

  6. QPainter 绘制图像接口

    阅读本文大概需要 3 分钟 我们在开发软件的过程中,绘制图像功能必不可少,使用 Qt 绘制图像时非常简单,只需要传递几个参数就可以实现功能,在 Qt 中绘制图像的 api有好几个 void drawI ...

  7. 【对线面试官】Java多线程基础

    // 请求直接交给线程池来处理 public void push(PushParam pushParam) { try { pushServiceThreadExecutor.submit(() -& ...

  8. D2Admin 登录用户重新初始话右侧菜单

    背景 最近用到D2Admin开发项目,用户登录菜单要根据用户角色权限获取,但是又不想用官网的方案(vue基于d2-admin的RBAC权限管理解决方案),所以自己加了个只修改 menuAside的方案 ...

  9. h5-video,视频在微信里变形、有黑边

    如这种情况: 微信可谓是video标签的重灾区,如果你兼容了安卓的微信,那么在其他浏览器一般也没问题了除了个别(IE:你们看我干吗?). 解决方案: <video src="video ...

  10. Python编程小技巧(一)

    在使用Tkinter编写代码的时候,有时候会忘记某个组件的参数是什么或者忘记某个参数怎么拼写的,此时可以通过如下方式查询组件的参数列表,以按钮组件为例: 1 # -*- coding:utf-8 -* ...