基于Java的三角函数像素级画图算法的研究与实现
林宗朝
(厦门大学自动化系,福建 厦门 361005)
摘要:在Windows中的映射模式和几种坐标体系原理的基础上,提出了三角函数像素级的画图算法。该算法代码编写容易,具备重复利用性强等优点,同时有效避免缺乏流程控制的缺点,最后结合正弦函数演示此方案的实现代码和程序运行结果。
关键词:Java;三角函数;图像处理;算法;像素
中图分类号:TP301.6 文献标识码:A
The Research and Implementation of Algorithm
based on Java and Trigonometric Functions Pixel-level Drawing
LIN
Zong-chao
(Department
of Automation, Xiamen University, Fujian Xiamen 361005)
Key
words:Java;trigonometric functions;image processing;
algorithm;pixels
数学是自然科学的基础,计算机科学实际上是数学的一个分支。特别是在计算机图形图像处理方面的应用更是离不开数学,而解决数学函数图形在计算机屏幕上的显示方法正是计算机图形图像处理的关键问题,尤其是三角函数在计算机屏幕上的画图算法。因此怎样在现有基础上开发出各种图形图像处理算法成为一个很重要的问题。本文以Java为平台讲述三角函数在计算机屏幕上的画图算法。
1 Windows中的映射模式
Windows默认的映射模式是MM_TEXT,它是以像素为单位的。X轴向右为正,Y轴向下为正。默认的坐标原点在屏幕左上角。固定比例的映射模式有MM_LOMETRIC、MM_HIMETRIC、MM_LOENGLISH、MM_HIENGLISH和MM_TWIPS共5种。它们默认的坐标原点都是在左上角。其区别在于每一个逻辑单位对应的物理大小不一样。一个逻辑单位所对应的物理大小分别为0.1毫米,0.01毫米,0.01英寸,0.001英寸,1/1440英寸(0.0007英寸)。对于可变比例的映射模式用户可以自己定义一个逻辑单位代表的大小,其大小可以任意。也可以让这个大小随环境的改变而改变。有MM_ISOTROPIC,MM_ANISOTROPIC这两种映射模式。其逻辑单位的大小等于视口范围和窗口范围的比值。两者的不同在于前者要求X轴和Y轴的度量单位必须相同,而后者没有这样的限制。
2 Windows中的几种坐标体系
(1)屏幕坐标是描述物理设备(显示器、打印机等)的一种坐标体系,坐标原点在屏幕的左上角,X轴向右为正,Y轴向下为正。度量单位是像素。原点、坐标轴方向、度量单位都是不能够改变的。
(2)设备坐标(又称物理坐标)是描述在屏幕和打印机显示或打印的窗体的一种坐标体系。默认的坐标原点是在其客户区的左上角。X轴向右为正,Y轴向下为正。度量单位为像素。原点和坐标轴方向可以改变,但是度量单位不可以改变。
(3)逻辑坐标是在程序中控制显示,打印使用的坐标体系。该坐标系与定义的映射模式密切相关。默认的映射模式是MM_TEXT。我们可以通过设置不同的映射模式来改变该坐标体系的默认行为。
3 Java的基础应用
Java
Application以main()方法作为程序入口,由Java解释器解释执行,用以实现控制台或GUI方面的应用。Java
Applet没有main()方法,但是有init()和paint()等方法,由浏览器解释执行,主要用于在网页上显示动画等功能,是Java语言在B/S客户端编程的主要应用。
4 三角函数像素级的画图算法
4.1构建二维平面的直角坐标系
在屏幕上以点O(x ,y
)为坐标原点构建直角坐标系,距离以像素为单位。(1)画X轴线:drawLine(-M+x ,y ,M+x ,y
),M为X轴上距离原点的坐标;(2)画X轴的箭头:drawLine(M+x -a,y + b,M+x ,y
),a和b的距离不宜过长,取20个像素以内为宜;(3)画Y轴线:drawLine(x ,-N+y ,x ,N+y
),N为Y轴上距离原点的坐标;(4)画Y轴的箭头:drawLine(x + b,-N+y +a,x ,-N+y
),a和b的距离不宜过长,取20个像素以内为宜;(5)画X轴刻度:每个刻度之间的距离为P*∏,P为整数,∏取3.14;(6)画Y轴刻度:每个刻度之间的距离为Q,单位为像。
4.2三角函数形式的变换
由于Java所用的坐标系统的原点在窗口的左上角,并且包括了窗口的标题栏和窗口的边界,X轴向右为正,Y轴向下为正,度量单位是像素,所以为了满足人们的视觉习惯,要进行坐标的变换。首先是原点坐标的平移,其次是Y轴的正方向取反向上,再次是改变函数的幅值,最后是改变自变量的周期。三角函数的坐标变换过程如下:(1)原点坐标平移到点O(x
,y ),则函数形式变为y- y =f(x- x );(2)Y轴的正方向取反向上,则函数形式变为y= y - f(x- x
);(3)改变函数的幅值,则函数形式变为y= y - C*f(x- x );(4)改变自变量的周期,则函数形式变为:y= y -
C*f((x- x )/D)。
4.3以画像素点的形式输出三角函数的图形
以正弦函数y=sin(x)为例,结合理想状态下地震波p波(纵波)从中心向外扩展的过程,演示三角函数像素级图形的输出在paint(Graphics
g)函数体的末尾添加如下Java代码:
for(int
x=-M+x ;x<=M+x ;x++)
{ C=C-t; //t为幅值每次递减的长度
int y;
y=( y -(int)(C*Math.sin((x- x )/D)));
g.drawString(".",x,y); //在点(x,y)处输出字符"."
}
5 结束语
函数图形在计算机屏幕上的显示算法是计算机图形图像处理十分重要的问题,急需解决。本文仅是针对三角函数图形在计算机屏幕上的像素级显示算法进行的一些探讨和研究,并用Java编程实现。希望其他类似项目能从中获益。