利用Graphics类画任意显式函数图像,只需修改代码中的F()函数即可,另外调整timesx和timesy参数来分方向放大或缩小图像。需要重定义坐标系。

  1. package test;
  2.  
  3. import javax.swing.*;
  4. import java.awt.Graphics;
  5.  
  6. public class DrawFunction extends JFrame {
  7. static double timesx = 10, timesy = 10;
  8. double F(double x) {
  9. return Math.sin(x) / Math.pow(1.1, -x);//函数表达式
  10. }
  11. int x0, y0;
  12. static int W = 800, H = 600;
  13. static double L = -W / 2, R = W / 2;
  14. Graphics G;
  15. public void setOrigin(int x, int y) {
  16. this.x0 = x;
  17. this.y0 = y;
  18. // show coordinate axis
  19. drawLine(-W / 2, 0, W / 2, 0);
  20. drawLine(0, -H / 2, 0, H / 2);
  21. drawString("X", W / 2 - 30, -20);
  22. drawString("Y", -20, H / 2 - 20);
  23. for (int i = 1; i <= 10; i ++) {
  24. draw(W / 2 - i - 6, i);
  25. draw(W / 2 - i - 6, -i);
  26. }
  27. for (int i = 1; i <= 10; i ++) {
  28. draw(-i, H / 2 - i);
  29. draw(i, H / 2 - i);
  30. }
  31. }
  32. public DrawFunction() {
  33. add(new NewPanel());
  34. }
  35. public static void main(String[] args) {
  36. DrawFunction frame = new DrawFunction();
  37. frame.setTitle("DrawFunction");
  38. frame.setSize(W, H);
  39. frame.setLocationRelativeTo(null);
  40. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  41. frame.setVisible(true);
  42. frame.setResizable(false);
  43. }
  44. public class Coordinate2D {
  45. int x, y;
  46. public Coordinate2D(int x, int y) {
  47. this.x = x;
  48. this.y = y;
  49. }
  50. public int getPixelPointX() {
  51. return x0 + x;
  52. }
  53. public int getPixelPointY() {
  54. return y0 - y;
  55. }
  56. }
  57. class NewPanel extends JPanel {
  58. protected void paintComponent(Graphics g) {
  59. super.paintComponent(g);
  60. G = g;
  61. setOrigin(W / 2, H / 2);
  62. // in the following , draw what you want draw!
  63. for (int i = -W / 2; i <= W / 2; i ++) {
  64. draw(i, work(i));
  65. }
  66. /*
  67. for (int i = 0; i < 1000; i ++) {
  68. int x = (int)(Math.random() * 400 - 200);
  69. int y = (int)(Math.random() * 400 - 200);
  70. drawString("哈哈", x, y);
  71. }
  72. */
  73. }
  74. }
  75. int work(int x) {
  76. //timesx = 0.01;
  77. //timesy = 100;
  78. return (int)(F(x / timesx) * timesy);
  79. }
  80. public void draw(int x, int y) {
  81. int X = new Coordinate2D(x, y).getPixelPointX();
  82. int Y = new Coordinate2D(x, y).getPixelPointY();
  83. G.drawLine(X, Y, X, Y);
  84. }
  85. public void drawRec(int x1, int y1, int x2, int y2) {
  86. int dx = x1 < x2? 1 : -1;
  87. int dy = y1 < y2? 1 : -1;
  88. for (int i = x1; i != x2 + dx; i += dx) {
  89. for (int j = y1; j != y2 + dy; j += dy) {
  90. draw(i, j);
  91. }
  92. }
  93. }
  94. public void drawLine(int x1, int y1, int x2, int y2) {
  95. int dx = x1 < x2? 1 : -1;
  96. if (x1 == x2) drawRec(x1, y1, x2, y2);
  97. else {
  98. double d = (double)(y2 - y1) / (x2 - x1);
  99. for (int i = x1; i != x2 + dx; i += dx) {
  100. draw(i, (int)(y1 + (i - x1) * d));
  101. }
  102. }
  103. }
  104. public void drawString(String s, int x, int y) {
  105. int X = new Coordinate2D(x, y).getPixelPointX();
  106. int Y = new Coordinate2D(x, y).getPixelPointY();
  107. G.drawString(s, X, Y);
  108. }
  109. }

[Java画图]画函数图像的更多相关文章

  1. Catlike学习笔记(1.2)-使用Unity画函数图像

    『Catlike系列教程』第二篇来了~今天周六,早上(上午11点)醒来去超市买了一周的零食回来以后就玩了一整天游戏非常有负罪感.现在晚上九点天还亮着感觉像下午7点左右的样子好像还不是很晚...所以就写 ...

  2. HTML+JavaScript画函数图像

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 用python画函数图像

    import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 1, 50) # 从0到1,等分50分 y = 210*(x ...

  4. java画图程序_图片用字母画出来_源码发布_版本二

    在上一个版本:java画图程序_图片用字母画出来_源码发布 基础上,增加了图片同比例缩放,使得大像素图片可以很好地显示画在Notepad++中. 项目结构: 运行效果1: 原图:http://imag ...

  5. java画图程序_图片用字母画出来_源码发布

    在之前写了一篇blog:java画图程序_图片用字母画出来 主要是把一些调试的截图发布出来,现在程序调试我认为可以了(当然,你如果还想调试的话,也可以下载源码自己调试). 就把源码发布出来. 项目结构 ...

  6. java画图程序_图片用字母画出来

    最近在研究怎样将图片用字母在文本编辑工具中“画”出来. 你看了这个可能还不知道我想说什么? 我想直接上图,大家一定就知道了 第一张:小猫 原图:http://www.cnblogs.com/hongt ...

  7. Catlike学习笔记(1.3)-使用Unity画更复杂的3D函数图像

    第三篇来了-今天去参加了 Unite 2018 Berlin,感觉就是....非常困...回来以后稍微睡了下清醒了觉得是时候认真学习下了,不过讲的很多东西都是还没有发布或者只有 Preview 的版本 ...

  8. Java编写画图板程序细节-保存已画图形

    没有Java编写画图板程序细节-保存已画图形   一.为何我们要保存画图板上已画图形呢? 有很多人会问,为什么我们一定要保存画图板上已经画好了的图形呢?原因很简单.当我们在画图板上画完自己想画的图形后 ...

  9. 教你如何绘制数学函数图像——numpy和matplotlib的简单应用

    numpy和matplotlib的简单应用 一.numpy库 1.什么是numpy NumPy系统是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表 ...

随机推荐

  1. Cyclic Nacklace 杭电3746

    CC always becomes very depressed at the end of this month, he has checked his credit card yesterday, ...

  2. [php] phpStudy+XDebug配置

    一.配置前说明: 1.phpStudy集成了XDebug扩展,所以不用单独下载XDebug. 2.打开XDebug扩展:其它选项菜单 > PHP扩展 > Xdebug 二.配置步骤: ph ...

  3. #4018. 统计n! 尾部零

    题目出处: http://www.51cpc.com/problem/4018 题目描述 试统计正整数n的阶乘n!=1×2×3×…×n尾部连续零的个数. 输入格式 输入正整数n 输出格式 输出个数 样 ...

  4. ASP.Net内置对象之网页之间传参(一)

    Response对象 主要运用于数据从服务器发送到浏览器,可以输出数据.页面跳转.各个网页之间传参数等操作. 以下讲解几个常用例子: 在页面中输出数据 主要通过Write .WriteFile方法输出 ...

  5. Python神库分享之geoip2 IP定位库

    先安装这两个 pip install python-geoip-geolite2 -i https://pypi.douban.com/simple pip install geoip2 然后下载资源 ...

  6. [Asp.Net Core] Blazor Server Side 项目实践 - 切换页面时保留状态

    前言: 这是 项目实践系列 , 算是中高级系列博文, 用于为项目开发过程中不好解决的问题提出解决方案的. 不属于入门级系列. 解释起来也比较跳跃, 只讲重点. 因为有网友的项目需求, 所以提前把这些解 ...

  7. Ubuntu中安装Hadoop

    安装前 1,更新apt sudo apt-get update   会让你输入密码(自己登录Ubuntu的时候设置的),输入密码不会显示在终端面板上,确定自己敲对之后点回车就行. 2,安装SSH服务器 ...

  8. python正则表达式详解之Match类及其方法

    1.Match对象简介 match对象通常是由正则表达式对象的match 方法,search 方法等经过匹配之后而产生.可以直接当做bool值使用,如果匹配则相当于True, 如果不匹配,则返回Non ...

  9. thinkphp if便签的使用

    <foreach name="list" item='v'> <tr> <td><img class="user" s ...

  10. tp5--数据库查询的常用操作

    首先,我们要先明确,我们平时经常使用那些操作,我看了开发手册,主要是连贯操作比较多. 连贯操作有: field, order, limit, page, GROUP, HAVING, cache, 其 ...