哈哈,没事随便写写。这两天做 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;
}
}
分享到:
相关推荐
在Java编程语言中,开发一个函数图像绘制工具是一项挑战性的任务,它涉及到图形用户界面(GUI)设计、数学计算以及图形渲染技术。这个"JAVA绘制函数图像工具"很可能是为了解决教育环境中教学与学习的需求,让学生或...
在计算机图形学中,画出数学函数曲线,如余弦函数cos(x),通常涉及编程语言中的数学库。Java提供了一种简单的方法来实现这个任务,利用其内置的三角函数`Math.cos()`。这个方法接受一个以弧度为单位的角度作为参数,...
在计算机科学中,绘制正弦函数曲线通常涉及以下几个步骤: 1. 数据生成:计算一系列角度(通常以弧度为单位),并对应计算这些角度的正弦值。 2. 图形库:使用编程语言的图形库,如Python的matplotlib或JavaScript...
程序架构分为以下几个步骤: 1. **初始化画布**:通过`getGraphics()`方法获取到绘图对象,用于后续的画图操作。 2. **画x轴**:使用循环语句在x轴上画出一系列点,然后添加箭头效果,箭头由两条与x轴成45度角的...
在Java编程语言中实现自然三次样条曲线涉及到几个关键概念和技术。本文将深入探讨这些内容,帮助读者理解自然三次样条曲线的原理,并了解如何在Java环境中构建这样的功能。 首先,我们来解释一下“三次样条曲线”。...
在Java中,实现Koch曲线通常涉及以下几个关键步骤: 1. **定义数据结构**:创建一个表示线段的数据结构,包括起始点和结束点坐标。 2. **基础线段**:初始化一条基本线段,作为Koch曲线的第一阶段。 3. **Koch规则*...
接下来,源代码部分则可能包含以下几个方面: 1. **示例程序**:开发者可能编写了多个示例程序,演示了如何使用Java进行图形绘制,包括简单的几何图形到复杂的动画效果。 2. **图形用户界面**:源代码可能包含了...
分段线性拟合,顾名思义,是将数据分为几个区间,并在每个区间内进行独立的一阶线性拟合。这种技术适用于数据在不同区间内表现出不同的线性关系。实现分段线性拟合时,需要确定分段点,然后对每个子集分别执行一阶...
由于代码片段中未给出具体的实现细节,可以推测它包含了以下几个关键部分: - **绘制方法**:如 `drawLine`, `drawCurve`, `drawRect`, `drawEllipse` 等。 - **事件监听器**:用于处理鼠标点击事件,从而确定绘图的...
这个类可能包括以下几个部分: 1. 定义图形的宽度和高度,以及坐标轴的范围。 2. 计算正弦波的各个点,这通常涉及到循环,每个循环迭代对应一个x坐标,计算对应的y坐标(即sin(x)的值)。 3. 使用图形库(如Java2D...
首先,论文部分可能会涵盖以下几个关键知识点: 1. **Java图形库**:Java提供了多种图形库,如Java AWT(Abstract Window Toolkit)和Swing,它们提供了丰富的组件和方法来绘制图形。AWT是Java的基础图形库,而...
曲线系统包含四个函数切换按钮,一个重置x坐标按钮,和两个互斥的启停按钮。红线为当前x的值,黑线是坐标轴。 【备注】 1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验! 2.主要针对各个计算机相关...
我们将从以下几个方面来深入理解这个知识点: 1. **正弦曲线的数学基础** 正弦函数是一个周期性函数,它描述了振幅、频率、相位和初相等参数下的波形变化。在Android中,我们可以利用Java的Math库来获取正弦值,以...
程序的核心部分可能包括以下几个步骤: 1. **创建窗口**:首先,我们需要创建一个`JFrame`实例,并添加一个`JPanel`子组件。这将是我们的绘图面板。 2. **重写paintComponent方法**:在`JPanel`子类中,我们需要...
`AnimateDelete`类提供了几个构造函数,用于根据不同的情况初始化消除路径。例如,`AnimateDelete(int direct, Point a, Point b)`用于处理两个点之间的直线消除,`AnimateDelete(int direct, Point a, Point b, ...
Java实现三次自然样条插值通常涉及以下几个步骤: 1. 数据预处理:首先,你需要准备数据点集合,包括每个点的x坐标和y坐标。这些数据点应该按照x坐标升序排列。 2. 导入库:在Java代码中,你可能需要导入jama.jar...
只需在Java中定义一个接口,JNA会自动映射到DLL中的函数。使用`com.sun.jna.Native.load()`方法加载DLL,然后直接调用接口中的方法即可。相比JNI,JNA的语法更接近Java,降低了学习曲线。 3. **Java Service ...
在给定的代码示例中,主要使用了以下几个关键组件: 1. **`QuadCurve2D`** 和 **`CubicCurve2D`**:分别用于绘制二次贝塞尔曲线和三次贝塞尔曲线。这些曲线构成了花朵的花瓣。 2. **`Line2D`**:用于绘制直线,这里...
在Java编程中,学生成绩管理系统通常会涉及以下几个关键知识点: 1. **面向对象编程**:Java是一种面向对象的语言,系统设计时会采用类来表示学生、课程和成绩等实体,通过封装、继承和多态等特性实现模块化设计。...
它涉及到以下几个步骤: 1. 初始化:将数据点按顺序排列,并确定每个子区间的边界。 2. 构建系统方程:对于每个数据点,建立一个包含插值条件的线性方程组。方程组包括了数据点的值、导数和二阶导数的条件。 3. 解...