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

用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绘制函数图像工具

    在Java编程语言中,开发一个函数图像绘制工具是一项挑战性的任务,它涉及到图形用户界面(GUI)设计、数学计算以及图形渲染技术。这个"JAVA绘制函数图像工具"很可能是为了解决教育环境中教学与学习的需求,让学生或...

    在屏幕上画出余弦函数cos(x)曲线.docx

    在计算机图形学中,画出数学函数曲线,如余弦函数cos(x),通常涉及编程语言中的数学库。Java提供了一种简单的方法来实现这个任务,利用其内置的三角函数`Math.cos()`。这个方法接受一个以弧度为单位的角度作为参数,...

    绘制正弦函数曲线.7z

    在计算机科学中,绘制正弦函数曲线通常涉及以下几个步骤: 1. 数据生成:计算一系列角度(通常以弧度为单位),并对应计算这些角度的正弦值。 2. 图形库:使用编程语言的图形库,如Python的matplotlib或JavaScript...

    【Java案例】余弦函数

    程序架构分为以下几个步骤: 1. **初始化画布**:通过`getGraphics()`方法获取到绘图对象,用于后续的画图操作。 2. **画x轴**:使用循环语句在x轴上画出一系列点,然后添加箭头效果,箭头由两条与x轴成45度角的...

    自然三次样条曲线Java版

    在Java编程语言中实现自然三次样条曲线涉及到几个关键概念和技术。本文将深入探讨这些内容,帮助读者理解自然三次样条曲线的原理,并了解如何在Java环境中构建这样的功能。 首先,我们来解释一下“三次样条曲线”。...

    Koch曲线java代码直接运行

    在Java中,实现Koch曲线通常涉及以下几个关键步骤: 1. **定义数据结构**:创建一个表示线段的数据结构,包括起始点和结束点坐标。 2. **基础线段**:初始化一条基本线段,作为Koch曲线的第一阶段。 3. **Koch规则*...

    java实现一阶线性拟合,二阶线性拟合和分段线性拟合

    分段线性拟合,顾名思义,是将数据分为几个区间,并在每个区间内进行独立的一阶线性拟合。这种技术适用于数据在不同区间内表现出不同的线性关系。实现分段线性拟合时,需要确定分段点,然后对每个子集分别执行一阶...

    【计算机专业Java-毕业设计100套之】JAVA画图形学(论文+源代码)

    接下来,源代码部分则可能包含以下几个方面: 1. **示例程序**:开发者可能编写了多个示例程序,演示了如何使用Java进行图形绘制,包括简单的几何图形到复杂的动画效果。 2. **图形用户界面**:源代码可能包含了...

    java 画板,画图

    由于代码片段中未给出具体的实现细节,可以推测它包含了以下几个关键部分: - **绘制方法**:如 `drawLine`, `drawCurve`, `drawRect`, `drawEllipse` 等。 - **事件监听器**:用于处理鼠标点击事件,从而确定绘图的...

    正弦函数 程序代码

    这个类可能包括以下几个部分: 1. 定义图形的宽度和高度,以及坐标轴的范围。 2. 计算正弦波的各个点,这通常涉及到循环,每个循环迭代对应一个x坐标,计算对应的y坐标(即sin(x)的值)。 3. 使用图形库(如Java2D...

    JAVA画图形学程序(论文+源代码).zip

    首先,论文部分可能会涵盖以下几个关键知识点: 1. **Java图形库**:Java提供了多种图形库,如Java AWT(Abstract Window Toolkit)和Swing,它们提供了丰富的组件和方法来绘制图形。AWT是Java的基础图形库,而...

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

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

    [Android实例] 波浪动画效果,正弦曲线绘制

    我们将从以下几个方面来深入理解这个知识点: 1. **正弦曲线的数学基础** 正弦函数是一个周期性函数,它描述了振幅、频率、相位和初相等参数下的波形变化。在Android中,我们可以利用Java的Math库来获取正弦值,以...

    zhengxianquxian.zip_java 实时_正弦曲线

    程序的核心部分可能包括以下几个步骤: 1. **创建窗口**:首先,我们需要创建一个`JFrame`实例,并添加一个`JPanel`子组件。这将是我们的绘图面板。 2. **重写paintComponent方法**:在`JPanel`子类中,我们需要...

    连连看java程序代码,也能用论文

    `AnimateDelete`类提供了几个构造函数,用于根据不同的情况初始化消除路径。例如,`AnimateDelete(int direct, Point a, Point b)`用于处理两个点之间的直线消除,`AnimateDelete(int direct, Point a, Point b, ...

    三次自然样条插值法java实现

    Java实现三次自然样条插值通常涉及以下几个步骤: 1. 数据预处理:首先,你需要准备数据点集合,包括每个点的x坐标和y坐标。这些数据点应该按照x坐标升序排列。 2. 导入库:在Java代码中,你可能需要导入jama.jar...

    java dll文件调用的几种方式

    只需在Java中定义一个接口,JNA会自动映射到DLL中的函数。使用`com.sun.jna.Native.load()`方法加载DLL,然后直接调用接口中的方法即可。相比JNI,JNA的语法更接近Java,降低了学习曲线。 3. **Java Service ...

    经典的java2D 画图

    在给定的代码示例中,主要使用了以下几个关键组件: 1. **`QuadCurve2D`** 和 **`CubicCurve2D`**:分别用于绘制二次贝塞尔曲线和三次贝塞尔曲线。这些曲线构成了花朵的花瓣。 2. **`Line2D`**:用于绘制直线,这里...

    学生成绩管理系统(java版)

    在Java编程中,学生成绩管理系统通常会涉及以下几个关键知识点: 1. **面向对象编程**:Java是一种面向对象的语言,系统设计时会采用类来表示学生、课程和成绩等实体,通过封装、继承和多态等特性实现模块化设计。...

    三次样条插值java

    它涉及到以下几个步骤: 1. 初始化:将数据点按顺序排列,并确定每个子区间的边界。 2. 构建系统方程:对于每个数据点,建立一个包含插值条件的线性方程组。方程组包括了数据点的值、导数和二阶导数的条件。 3. 解...

Global site tag (gtag.js) - Google Analytics