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

 package test;

 import javax.swing.*;
import java.awt.Graphics; public class DrawFunction extends JFrame {
static double timesx = 10, timesy = 10;
double F(double x) {
return Math.sin(x) / Math.pow(1.1, -x);//函数表达式
}
int x0, y0;
static int W = 800, H = 600;
static double L = -W / 2, R = W / 2;
Graphics G;
public void setOrigin(int x, int y) {
this.x0 = x;
this.y0 = y;
// show coordinate axis
drawLine(-W / 2, 0, W / 2, 0);
drawLine(0, -H / 2, 0, H / 2);
drawString("X", W / 2 - 30, -20);
drawString("Y", -20, H / 2 - 20);
for (int i = 1; i <= 10; i ++) {
draw(W / 2 - i - 6, i);
draw(W / 2 - i - 6, -i);
}
for (int i = 1; i <= 10; i ++) {
draw(-i, H / 2 - i);
draw(i, H / 2 - i);
}
}
public DrawFunction() {
add(new NewPanel());
}
public static void main(String[] args) {
DrawFunction frame = new DrawFunction();
frame.setTitle("DrawFunction");
frame.setSize(W, H);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setResizable(false);
}
public class Coordinate2D {
int x, y;
public Coordinate2D(int x, int y) {
this.x = x;
this.y = y;
}
public int getPixelPointX() {
return x0 + x;
}
public int getPixelPointY() {
return y0 - y;
}
}
class NewPanel extends JPanel {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
G = g;
setOrigin(W / 2, H / 2);
// in the following , draw what you want draw!
for (int i = -W / 2; i <= W / 2; i ++) {
draw(i, work(i));
}
/*
for (int i = 0; i < 1000; i ++) {
int x = (int)(Math.random() * 400 - 200);
int y = (int)(Math.random() * 400 - 200);
drawString("哈哈", x, y);
}
*/
}
}
int work(int x) {
//timesx = 0.01;
//timesy = 100;
return (int)(F(x / timesx) * timesy);
}
public void draw(int x, int y) {
int X = new Coordinate2D(x, y).getPixelPointX();
int Y = new Coordinate2D(x, y).getPixelPointY();
G.drawLine(X, Y, X, Y);
}
public void drawRec(int x1, int y1, int x2, int y2) {
int dx = x1 < x2? 1 : -1;
int dy = y1 < y2? 1 : -1;
for (int i = x1; i != x2 + dx; i += dx) {
for (int j = y1; j != y2 + dy; j += dy) {
draw(i, j);
}
}
}
public void drawLine(int x1, int y1, int x2, int y2) {
int dx = x1 < x2? 1 : -1;
if (x1 == x2) drawRec(x1, y1, x2, y2);
else {
double d = (double)(y2 - y1) / (x2 - x1);
for (int i = x1; i != x2 + dx; i += dx) {
draw(i, (int)(y1 + (i - x1) * d));
}
}
}
public void drawString(String s, int x, int y) {
int X = new Coordinate2D(x, y).getPixelPointX();
int Y = new Coordinate2D(x, y).getPixelPointY();
G.drawString(s, X, Y);
}
}

[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. S7通信协议之你不知道的事儿

    在电气学习的路上,西门子PLC应该是我的启蒙PLC,从早期的S7-300/400 PLC搭建Profibus-DP网络开始接触,到后来的S7-200Smart PLC,再到现在的S7-1200/150 ...

  2. [php代码审计]bluecms v1.6 sp1

    一.环境搭建 bluecms v1.6 sp1源码 windows 7 phpstudy2016(php 5.4.45) seay源代码审计系统 源码在网上很容易下载,很多教程说访问地址 http:/ ...

  3. [GO] linux 下安装GO

    yum install mercurial安装 mercurial包 安装git包 yum install git 安装gcc yum install gcc 然后就可以下载golang的压缩包了 对 ...

  4. ubuntu16.04-交叉编译-SeetaFaceEngine-master

    0.前言 在要移植opecv和SeetaFaceEngine-master到ARM板子上运行的所有步骤之前,有几点需要注意的: 查看板子运行的Kernel版本 交叉编译工具链的gcc版本,关键就是工具 ...

  5. 大数据MapReduce相关的运维题

    1.在集群节点中/usr/hdp/2.4.3.0-227/hadoop-mapreduce/目录下,存在一个案例 JAR 包 hadoop-mapreduce-examples.jar.运行 JAR ...

  6. 《Metasploit魔鬼训练营》第一章实践作业

    <Metasploit魔鬼训练营>第一章实践作业 1.搜集Samba服务usermap_script安全漏洞的相关信息,画出该安全漏洞的生命周期图,标注各个重要事件点的日期,并提供详细描述 ...

  7. 2019-2020-1 20199326《Linux内核原理与分析》第四周作业

    第四周学习内容 庖丁解牛Linux内核分析第三章:MenuOS的构造 Linux内核分析实验三 学到的一些知识 操作系统两大宝剑:1.中断上下文的切换--保存现场和恢复现场 2.进程上下文的切换 Li ...

  8. Copy ArrayList的四种方式

    目录 简介 使用构造函数 使用addAll方法 使用Collections.copy 使用stream 总结 Copy ArrayList的四种方式 简介 ArrayList是我们经常会用到的集合类, ...

  9. 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pk创建自定义类

    此篇基本[COCOS2DX(2.X)_LUA开发之三]在LUA中使用自定义精灵(LUA脚本与自创建类之间的访问)及LUA基础讲解 在Lua第三篇中介绍了,如何在cocos2dx中使用Lua创建自定义类 ...

  10. 几个加速Swift开发的小tip

    又是周五了,周末不要浪,一起学点Swift!本周再次为大家带来了一些Swift的小技巧,都是些奇淫巧计,不知道也无妨,但Swift最吸引我的一点就是它的简洁易用.主要内容有: private(set) ...