J2SE中怎么画抛物线和双曲线 要做一个数学函数发生器 要求:至少包含直线(Y=AX+B)以及椭圆,抛物线,双曲线四种函数 系数可任意输入 有可变横纵座标(这是要做成什么样子,不懂) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【voidtanq】截止到2008-07-01 21:29:24的历史汇总数据(不包括此帖):发帖的总数量:0 发帖的总分数:0 结贴的总数量:0 结贴的总分数:0 无满意结贴数:0 无满意结贴分:0 未结的帖子数:0 未结的总分数:0 结贴的百分比:---------------------结分的百分比:---------------------无满意结贴率:---------------------无满意结分率:---------------------如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html 去看看 jasperReport 的使用吧! 当然 jfreeChat 也行 本人正在做贪吃蛇游戏..其中也用到了画图...你在JPanel上添加一个Canvas(画布).....然后调用Graphics类的draw...方法...实现画图...根据你的需要改变参数就ok了 知道画点就行了,最主要的就是进行坐标转换,可以编写一个坐标类,将x,y的坐标点转换为画布上的点,然后将点画出来.剩下的就是在x的一个取值范围内根据函数算y值,将x,y传给坐标类画点,这样什么函数都能画 抛物线不就是圆弧吗...用这个不就行了...drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) 绘制一个覆盖指定矩形的圆弧或椭圆弧边框。 Graphics类没有画点的方法,可以用画线的方法drawLine(int x1, int y1, int x2, int y2)来画点,只要x2=x1,y2=y1就行了 public class Test3 { public static void main(String[] args) { TriFunc tri = new TriFunc(); // 生成一块25×100的画布 Canvas canvas = new Canvas(25, 100); // 画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; } } 救命啊 X,Y是全局变量,他们的值怎么传不到public void paint(Graphics g)这个函数里啊public void actionPerformed(ActionEvent e)//监听 {if(e.getActionCommand()=="确定") { A=Integer.valueOf(tx.getText()); B=Integer.valueOf(ty.getText()); X=Integer.valueOf(ty.getText()); Y=Integer.valueOf(ty.getText());}public void paint(Graphics g) { System.out.print(X/Y);//此句每次输出1 if(X>Y) { a1=a1-X/Y*d;a3=a3+X/Y*d; } if(X<Y) { b2=b2+Y/X*d;b4=b4-Y/X*d; }} Myeclpse 的快捷键怎么搞咯! java运行时出错? javabean之间互相调用的变量问题 float类型问题 java语言中有哪些代码出错保护机制?各有何区别? 如何取得系统时间 上传视频技术架构? 关于对象系列化,这种方法为什么不对,50分!!! 一个菜鸟级的问题,我在用jdk1.2.1编译的时候,为什么javax类不能用?? File类的getLastModify()得到的是长型整数,如何才能得到一个已知文件日期? java记事本中保存,另存为实践怎么写? 【60分求助】点击按钮,弹出提示框,同时背景变暗怎么做?
楼主【voidtanq】截止到2008-07-01 21:29:24的历史汇总数据(不包括此帖):
发帖的总数量:0 发帖的总分数:0
结贴的总数量:0 结贴的总分数:0
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:---------------------结分的百分比:---------------------
无满意结贴率:---------------------无满意结分率:---------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
抛物线不就是圆弧吗...用这个不就行了...drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
绘制一个覆盖指定矩形的圆弧或椭圆弧边框。
public static void main(String[] args) {
TriFunc tri = new TriFunc();
// 生成一块25×100的画布
Canvas canvas = new Canvas(25, 100); // 画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;
}
}
public void actionPerformed(ActionEvent e)//监听
{if(e.getActionCommand()=="确定")
{
A=Integer.valueOf(tx.getText());
B=Integer.valueOf(ty.getText());
X=Integer.valueOf(ty.getText());
Y=Integer.valueOf(ty.getText());}
public void paint(Graphics g)
{ System.out.print(X/Y);//此句每次输出1
if(X>Y)
{
a1=a1-X/Y*d;a3=a3+X/Y*d;
}
if(X<Y)
{
b2=b2+Y/X*d;b4=b4-Y/X*d;
}
}