用java3D,怎样画出一个一直函数的图形呢??急急急!!!

usxue 2003-05-13 08:32:12
比如说函数为:f(x,y)=x*x+y*y;
怎样在java3D中画出他的图形呢??急急急!
而且如果知道已知的点的坐标,怎样画出他的点呢??
...全文
63 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
usxue 2003-05-13
  • 打赏
  • 举报
回复
呵呵……
能有完整的例子吗??
labimantou 2003-05-13
  • 打赏
  • 举报
回复
啥错
usxue 2003-05-13
  • 打赏
  • 举报
回复
怎么提示运行有错啊??
labimantou 2003-05-13
  • 打赏
  • 举报
回复
// 生成函数曲面
import com.sun.j3d.utils.geometry.*;
import javax.media.j3d.*;
import javax.vecmath.*;
public class Surface extends Shape3D
{
Surface()
{
this.setGeometry(createGeometry());
this.setAppearance(createAppearance());
}
// 具体函数,更改这一函数即可显示不同函数的图像
float calz(float x,float y)
{
return (float)(-1f*Math.sqrt(2-x*x-y*y));
}
Geometry createGeometry()
{
int MAXX=200;
int MAXY=200;
QuadArray surf = new QuadArray(
MAXX*MAXY*4, GeometryArray.COORDINATES
| GeometryArray.NORMALS);
for(int i=0;i<MAXX;i++)
{
for(int j=0;j<MAXY*4;j+=4)
{
int jb=j/4;
float x=(i-100f)/200.0f;
float y=(jb-100f)/200.0f;
// 计算一个平面上的4个点
Point3f A=new Point3f(x,y,calz(x,y));
Point3f B=
new Point3f(x+0.005f,y,calz(x+0.005f,y));
Point3f C=new Point3f(x+0.005f,
y+0.005f,calz(x+0.005f,y+0.005f));
Point3f D=new Point3f(x,y+0.005f,
calz(x,y+0.005f));
// 计算四个点的法向量
Vector3f a = new Vector3f(
A.x - B.x, A.y - B.y, A.z - B.z);
Vector3f b = new Vector3f(
C.x - B.x, C.y - B.y, C.z - B.z);
Vector3f n = new Vector3f();
n.cross(b, a);
n.normalize();
// 设置点坐标
surf.setCoordinate(i*MAXY*4+j, A);
surf.setCoordinate(i*MAXY*4+j+1, B);
surf.setCoordinate(i*MAXY*4+j+2, C);
surf.setCoordinate(i*MAXY*4+j+3, D);
// 设置点法向量
surf.setNormal(i*MAXY*4+j, n);
surf.setNormal(i*MAXY*4+j+1, n);
surf.setNormal(i*MAXY*4+j+2, n);
surf.setNormal(i*MAXY*4+j+3, n);
}
}
return surf;
}
Appearance createAppearance()
{
// 指定外观,这样才有明暗效果
Appearance appear = new Appearance();
Material material = new Material();
Color3f white = new Color3f(1.0f, 1.0f, 1.0f);
Color3f red = new Color3f(1.0f, 0.0f, 0.0f);
material.setDiffuseColor(red);
material.setSpecularColor(white);
material.setShininess(2.0f);
appear.setMaterial(material);
return appear;
}
}// end of Surface.java
// 生成函数曲面
import com.sun.j3d.utils.geometry.*;
import javax.media.j3d.*;
import javax.vecmath.*;
public class Surface extends Shape3D
{
Surface()
{
this.setGeometry(createGeometry());
this.setAppearance(createAppearance());
}
// 具体函数,更改这一函数即可显示不同函数的图像
float calz(float x,float y)
{
return (float)(-1f*Math.sqrt(2-x*x-y*y));
}
Geometry createGeometry()
{
int MAXX=200;
int MAXY=200;
QuadArray surf = new QuadArray(
MAXX*MAXY*4, GeometryArray.COORDINATES
| GeometryArray.NORMALS);
for(int i=0;i<MAXX;i++)
{
for(int j=0;j<MAXY*4;j+=4)
{
int jb=j/4;
float x=(i-100f)/200.0f;
float y=(jb-100f)/200.0f;
// 计算一个平面上的4个点
Point3f A=new Point3f(x,y,calz(x,y));
Point3f B=
new Point3f(x+0.005f,y,calz(x+0.005f,y));
Point3f C=new Point3f(x+0.005f,
y+0.005f,calz(x+0.005f,y+0.005f));
Point3f D=new Point3f(x,y+0.005f,
calz(x,y+0.005f));
// 计算四个点的法向量
Vector3f a = new Vector3f(
A.x - B.x, A.y - B.y, A.z - B.z);
Vector3f b = new Vector3f(
C.x - B.x, C.y - B.y, C.z - B.z);
Vector3f n = new Vector3f();
n.cross(b, a);
n.normalize();
// 设置点坐标
surf.setCoordinate(i*MAXY*4+j, A);
surf.setCoordinate(i*MAXY*4+j+1, B);
surf.setCoordinate(i*MAXY*4+j+2, C);
surf.setCoordinate(i*MAXY*4+j+3, D);
// 设置点法向量
surf.setNormal(i*MAXY*4+j, n);
surf.setNormal(i*MAXY*4+j+1, n);
surf.setNormal(i*MAXY*4+j+2, n);
surf.setNormal(i*MAXY*4+j+3, n);
}
}
return surf;
}
Appearance createAppearance()
{
// 指定外观,这样才有明暗效果
Appearance appear = new Appearance();
Material material = new Material();
Color3f white = new Color3f(1.0f, 1.0f, 1.0f);
Color3f red = new Color3f(1.0f, 0.0f, 0.0f);
material.setDiffuseColor(red);
material.setSpecularColor(white);
material.setShininess(2.0f);
appear.setMaterial(material);
return appear;
}
}// end of Surface.java
usxue 2003-05-13
  • 打赏
  • 举报
回复
给个例子好吗??呵呵……没学过JAVA3D啊!
呵呵……
谢谢!急急急!!!
labimantou 2003-05-13
  • 打赏
  • 举报
回复
用QuardArray,你要画得应该是个面吧
labimantou 2003-05-13
  • 打赏
  • 举报
回复
这就是个完整的例子阿!!!!!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧