`
wangdei
  • 浏览: 366839 次
社区版块
存档分类
最新评论

用java 画几个函数曲线

阅读更多

哈哈,没事随便写写。这两天做 http://www.bt285.cn BT下载 与  http://www.5a520.cn 小说520网 这两个网站太累了。

public class Test {
   
public static void main(String[] args) {
        TriFunc tri
= new TriFunc();
       
       
// 生成一块25×100的画布
        Canvas canvas = new Canvas(25, 120);

       
// 画sin曲线,周期为2
        tri.drawSin(canvas, 2.0);
        canvas.printCanvas();
       
        System.out.println();
        canvas.reset();
       
// 画cos曲线,周期为2
        tri.drawCos(canvas, 2.0);
        canvas.printCanvas();
    }
}

class TriFunc {

   
/**
     * 画sin曲线
     *
@param canvas 画布
     *
@param period 曲线周期
    
*/
   
public void drawSin(Canvas canvas, double period) {       
       
char[][] chars = canvas.getCanvas();
       
// x 轴的比率
        double xRatio = (2 * period * Math.PI) / (canvas.getWidth() - 1);
       
// y 轴的放大倍率
        int yMulti = (canvas.getHeight() - 1) / 2;
       
for(int i = 0; i < canvas.getWidth(); i++) {
           
// 将数组索引映射为横坐标值
            double k = (i - canvas.getWidth() / 2) * xRatio;
           
// 将sin值映射为数组索引
            int h = yMulti - (int)Math.round(Math.sin(k) * yMulti);
            chars[h][i]
= Canvas.FILL_CHAR;
        }
    }
   
   
/**
     * 画cos曲线
     *
@param canvas 画布
     *
@param period 曲线周期
    
*/
   
public void drawCos(Canvas canvas, double period) {
       
char[][] chars = canvas.getCanvas();
       
double xRatio = (2 * period * Math.PI) / (canvas.getWidth() - 1);
       
int yMulti = (canvas.getHeight() - 1) / 2;
       
for(int i = 0; i < canvas.getWidth(); i++) {
           
double k = (i - canvas.getWidth() / 2) * xRatio;
           
int h = yMulti - (int)Math.round(Math.cos(k) * yMulti);
            chars[h][i]
= Canvas.FILL_CHAR;
        }
    }
}


class Canvas {
   
   
private int height;
   
private int width;
   
private char[][] canvas;  
   
   
// 填充字符
    public static char FILL_CHAR = '+';
   
// 空白字符
    public static char BLANK_CHAR = ' ';
   
   
/**
     * 构建一块画布
     *
@param height
     *
@param width
    
*/
   
public Canvas(int height, int width) {
       
// 由于需要画坐标轴,所以得采用奇数
        this.height = height % 2 == 0 ? height + 1 : height;
       
this.width = width % 2 == 0 ? width + 1 : width;              
        init();
    }
   
   
/**
     * 初始化画布
    
*/
   
private void init() {
       
this.canvas = new char[height][width];
       
for(int i = 0; i < height; i++) {
           
for(int j = 0; j < width; j++) {
                canvas[i][j]
= BLANK_CHAR;
            }
        }
        addAxis();
    }
   
   
/**
     * 添加坐标轴
    
*/
   
private void addAxis() {
       
// 添加横坐标
        int y = height / 2;
       
for(int x = 0; x < width; x++) {
            canvas[y][x]
= '-';
        }
       
// 添加纵坐标
        int xx = width / 2;
       
for(int yy = 0; yy < height; yy++) {
            canvas[yy][xx]
= '|';
        }
       
// 添加原点
        canvas[y][xx] = '+';
    }
   
   
/**
     * 输出画布
    
*/
   
public void printCanvas() {
       
for(int i = 0; i < height; i++) {
           
for(int j = 0; j < width; j++) {
                System.out.print(canvas[i][j]);
            }
            System.out.println();
        }
    }
   
   
/**
     * 清空画布
    
*/
   
public void reset() {
        init();
    }
   
   
public int getHeight() {
       
return height;
    }
   
public int getWidth() {
       
return width;
    }

   
public char[][] getCanvas() {
       
return canvas;
    }   
}

4
0
分享到:
评论
3 楼 zengjinliang 2009-02-10  
写的不错,收藏了,呵呵
2 楼 whaosoft 2009-02-06  
呵呵 挺好玩的
1 楼 radovi 2009-02-06  
我也刚在看图形那块 呵呵

相关推荐

    基于Java实现的简单动态曲线系统源码+项目说明.zip

    曲线系统包含四个函数切换按钮,一个重置x坐标按钮,和两个互斥的启停按钮。红线为当前x的值,黑线是坐标轴。 【备注】 1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验! 2.主要针对各个计算机相关...

    基于 JavaSwing 的简单动态曲线系统源码,在图形界面上动态绘制几种自左至右移动的简单曲线,同时动态显示对应坐标值

    在图形界面 (GUI) 上动态绘制几...曲线系统包含四个函数切换按钮,一个重置x坐标按钮,和两个互斥的启停按钮。红线为当前x的值,黑线是坐标轴。 可以看到函数图像y=x的x和y值相对,x和y的值显示正确且同步。 多种曲线。

    插值法与最小二乘法曲线拟合 v1.1 注册版.rar

    且是从给定的一组实验数据出发,寻求已知函数的一个逼近函数y=ρ(x),使得逼近函数从总体上来说与已知函数的偏差按某种方法度量能达到最小而又不一定过全部的点(xi,yi),即是最小二乘曲线拟合。本软件就是针对这些...

    QT 绘图函数

    前面一节我们讲解了图片的显示,其中很多都用到了坐标的变化,这一节我们简单讲一下Qt的坐标系统,其实也还是主要讲上一节的那几个函数。这里我们先讲解一下Qt的坐标系,然后讲解那几个函数,它们分别是: translate...

    matlab源码求一元函数-PyStudy:PyStudy

    目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Python / Shell / Ruby / Go 网络爬虫 - Python / PHP / C++ 数据分析挖掘 - Python / R / Scala / Matlab 机器学习 - ...

    GeoGebra 4.2中文特别版

    列举几个优点: (1)完全免费,真是难得啊; (2)程序思路非常清晰,网站wiki说程序是由美国佛罗里达州亚特兰大学的数学教授 Markus Hohenwarter所设计的。而看编写人员介绍中,这程序是一个硕士研究生的 ...

    GeoGebra 3.2中文特别版【比几何画板更强大的动态数学软件】

    列举几个优点: (1)完全免费,真是难得啊; (2)程序思路非常清晰,网站wiki说程序是由美国佛罗里达州亚特兰大学的数学教授Markus Hohenwarter所设计的。而看编写人员介绍中,这程序是一个硕士研究生的毕业论文...

    matlab源码求一元函数-python-:Python-

    matlab源码求一元函数 Python - 100天从新手到大师 作者:骆昊 说明:最近有很多想学习Python的小伙伴申请单独加我...目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Pyth

    GeoGebra v6.0.546.0.zip

    一方面来说,GeoGebra(geogebra中文版)是一个动态的几何软件,您可以在上面画点、向量、线段、直线、多边形、圆锥曲线,甚至是函数,事后您还可以改变它们的属性;另一方面来说,您也可以直接输入方程和点坐标。所以...

    matlab源码求一元函数-Python-100-Days-master:Python-100天大师

    目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Python / Shell / Ruby / Go 网络爬虫 - Python / PHP / C++ 数据分析挖掘 - Python / R / Scala / Matlab 机器学习 - ...

    matlab源码求一元函数-study:学习

    matlab源码求一元函数 Python - 100天从新手到大师 作者:骆昊 ...目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Python / Shell / Ruby / Go 网络爬虫 -

    matlab源码求一元函数-python-num:测试

    matlab源码求一元函数 Python - 100天从新手到大师 作者:骆昊 ...目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Python / Shell / Ruby / Go 网络爬虫 -

    matlab源码求一元函数-100day:100天

    matlab源码求一元函数 Python - 100天从新手到大师 作者:骆昊 ...目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Python / Shell / Ruby / Go 网络爬虫 -

    matlab源码求一元函数-python100:python100

    matlab源码求一元函数 Python - 100天从新手到大师 作者:骆昊 ...目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Python / Shell / Ruby / Go 网络爬虫 -

    kmeans聚类matlab代码模板-aa:a

    目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Python / Shell / Ruby / Go 网络爬虫 - Python / PHP / C++ 数据分析挖掘 - Python / R / Scala / Matlab 机器学习 - ...

    matlab源码求一元函数-Python_100_Plan:100天学会python

    matlab源码求一元函数 ...目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Python / Shell / Ruby / Go 网络爬虫 - Python / PHP / C++ 数据分析挖掘 - Python / R / Scal

    RBFClassifier:一般用途的分类器和神经网络

    由于可以进行几个重要的数学分析,因此为该算法选择了高斯曲线。 只有直接相关的输入会影响网络。 曲线收敛到零的速度如此之快,以至于可以通过正确规划曲线的位置来避免学习数据的模糊性(参见下面的 K-Means)。 ...

    matlab源码求一元函数-100-Python:100-Python

    matlab源码求一元函数 Python - 100天从新手到大师 作者:骆昊 说明:最近有很多想学习Python的小伙伴申请单独加我...目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Pyth

    matlab源码求一元函数-python-100-Days:python-100天

    matlab源码求一元函数 Python - 100天从新手到大师 作者:骆昊 ...目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Python / Shell / Ruby / Go 网络爬虫 -

    kmeans聚类matlab代码模板-pythonStudy:python学习

    目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Python / Shell / Ruby / Go 网络爬虫 - Python / PHP / C++ 数据分析挖掘 - Python / R / Scala / Matlab 机器学习 - ...

Global site tag (gtag.js) - Google Analytics