社区
Java SE
帖子详情
用java3D,怎样画出一个一直函数的图形呢??急急急!!!
usxue
2003-05-13 08:32:12
比如说函数为:f(x,y)=x*x+y*y;
怎样在java3D中画出他的图形呢??急急急!
而且如果知道已知的点的坐标,怎样画出他的点呢??
...全文
63
7
打赏
收藏
用java3D,怎样画出一个一直函数的图形呢??急急急!!!
比如说函数为:f(x,y)=x*x+y*y; 怎样在java3D中画出他的图形呢??急急急! 而且如果知道已知的点的坐标,怎样画出他的点呢??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
这就是个完整的例子阿!!!!!
淘天组内
急
招,
急
急
急
!HC真的多!流程简单,快到碗里来~~
女生二本二战考研失败,技术很菜,找了很久的Java岗位,都是山东省内公司,根本没有人联系我,想着可能。大三,二本,目前在用友摸鱼,现在实习一周多了,一点东西没学到,每天特别焦虑,因为实习就是想学点技术然。...
题解 | #with rollup 与 单独拎出排序在前后#
你真的知道HR是怎么筛简历的么?!含真秋招企业汇总 你真的知道HR是怎么筛简历的么?!含真秋招企业汇总 众阳健康--售前技术工程师--一面及终面面经 阿里测开一、二、三面和hr面面经(已发意向书) 【总结1/4】...
python入门小游戏代码20行,python入门小游戏代码
2、Panda3D:是由迪士尼开发的3D游戏引擎,
一个
用于Python和C++程序的3D渲染和游戏开发框架,并由卡内基梅陇娱乐技术中心负责维护,使用C++编写的,针对Python进行了完全的封装。/* 加法
函数
*/。
JAVA记事本源代码 收藏
JAVA记事本源代码 import java.awt.*; import java.awt.event.*; import java.text.*; import java.util.*; import java.io.*; import javax.swing.undo.*; import javax.swing.*; import javax.swing.event.*; ...
保证你现在和未来不失业的十种关键技术
不要告诉我你们公司对原来用VB3开发的业务处理系统很满意,而你呢,也认为自己除了用C语言开发程序以外,不会再去做别的什么事情。 你是不是对.NET和Java为争夺开发工具市场撕破脸皮而熟视无睹,你是不
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章