- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我为 MATLAB 编写了一个 JAVA-3D 扩展,以便能够以良好的性能进行 3D 绘图。我现在可以画线、点等。
但是,如果您运行我的程序——即使在主程序中加载了几个对象——从某些查看位置来看,一切都会消失。
如果任何熟悉 Java 3D 的人能帮助我,我将非常高兴。从它工作的那一刻起,我计划将它发布在 Mathworkscentral 上,包括对帮助解决问题的每个人的致谢。这是代码:
import com.sun.j3d.utils.behaviors.vp.*;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.swing.JFrame;
import javax.vecmath.*;
public class scatterJ3D extends JFrame {
/**
*
*/
private static final long serialVersionUID = 8657880087849824536L;
public SimpleUniverse MyUniverse;
BoundingSphere bounds;
public scatterJ3D(int WindowWidth, int WindowHeight, String Title) {
// Make sure MATLAB is not closed when GUI is closed:
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
dispose();
}
});
// Launch and init GUI
setTitle(Title);
setSize(WindowWidth, WindowHeight);
setLocationRelativeTo(null);
setLayout(new BorderLayout());
GraphicsConfiguration config = SimpleUniverse
.getPreferredConfiguration();
Canvas3D c = new Canvas3D(config);
c.setSize(WindowWidth, WindowHeight);
c.setDoubleBufferEnable(true);
add("Center", c);
// Create MyUniverse
MyUniverse = new SimpleUniverse(c);
// Init Bounds
bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
// Enable Mouse rotation - new Way
OrbitBehavior orbit = new OrbitBehavior(c, OrbitBehavior.REVERSE_ALL);
// Option vertikales Drehen verhindern:
// orbit.setRotYFactor(0.0f);
orbit.setSchedulingBounds(bounds);
// Create Viewing Platform
ViewingPlatform vp = MyUniverse.getViewingPlatform();
vp.setViewPlatformBehavior(orbit);
MyUniverse.getViewingPlatform().setNominalViewingTransform();
// Set near Plane clipping
View myview = c.getView();
myview.setFrontClipDistance(0.0f);
myview.setBackClipDistance(100.0f);
myview.setVisibilityPolicy(View.VISIBILITY_DRAW_ALL);
}
public void setView(String Mode) {
ViewingPlatform vp = MyUniverse.getViewingPlatform();
// Set the user's initial viewpoint using lookAt()
TransformGroup vpTG = vp.getViewPlatformTransform();
Transform3D t3d = new Transform3D();
vpTG.getTransform(t3d);
// lookAt Arguments are: viewer position, where looking, up direction
if (Mode.compareToIgnoreCase("Lab") == 0) {
System.out.println("View set to Lab Mode!");
t3d.lookAt(new Point3d(0.0f, 0.0f, -2.0f), new Point3d(0.0f, 0.0f,
0.0f), new Vector3d(1.0, 0.0, 0.0));
} else if (Mode.compareToIgnoreCase("RGB") == 0) {
System.out.println("View set to Lab Mode!");
t3d.lookAt(new Point3d(3.0f, -1.0f, -2.0f), new Point3d(0.0f, 0.0f,
0.0f), new Vector3d(1.0, 1.0, 1.0));
} else {
System.out
.println("ERROR --> View can only be set to RGB or Lab Mode!");
}
t3d.invert();
vpTG.setTransform(t3d);
}
public void setView(float viewerPosition[],float lookAt[], float upVector[]) {
// Convert MATLAB float to Java Data Types
Point3d JviewerPosition = new Point3d(viewerPosition[0], viewerPosition[1], viewerPosition[2]);
Point3d JlookAt = new Point3d(lookAt[0], lookAt[1], lookAt[2]);
Vector3d JupVector = new Vector3d(upVector[0], upVector[1], upVector[2]);
ViewingPlatform vp = MyUniverse.getViewingPlatform();
// Set the user's initial viewpoint using lookAt()
TransformGroup vpTG = vp.getViewPlatformTransform();
Transform3D t3d = new Transform3D();
vpTG.getTransform(t3d);
// Set LookAt to input Values
t3d.lookAt(JviewerPosition, JlookAt, JupVector);
t3d.invert();
vpTG.setTransform(t3d);
}
public Background setBackgroundColor(float r, float g, float b) {
// Create BranchGroup MyRoot
BranchGroup MyRoot = new BranchGroup();
// Set the background color
Background back = new Background(r, g, b);
back.setApplicationBounds(bounds);
back.setCapability(Background.ALLOW_COLOR_WRITE);
// System.out.println("Hier komma noch hin");
MyRoot.addChild(back);
MyRoot.compile();
MyUniverse.addBranchGraph(MyRoot);
return back;
}
// public Shape3D createPoints(float Coords[][], float Colors[][],int pointsize, float pivot[])
public PointArray createPoints(float Coords[][], float Colors[][],
int pointsize, float pivot[])
{
// Convert MATLAB float to Java Data Types
Vector3f Jpivot = new Vector3f(pivot[0], pivot[1], pivot[2]);
Point3f Jcoords[] = new Point3f[Coords.length];
Color4f Jcolors[] = new Color4f[Colors.length];
for (int i = 0; i < Coords.length; i++) {
Jcoords[i] = new Point3f(Coords[i][0], Coords[i][1], Coords[i][2]);
// x-Achse zeigt nach oben, y-Achse nach rechts:
Jcolors[i] = new Color4f(Colors[i][0], Colors[i][1], Colors[i][2],
Colors[i][3]);
}
// set up the appearance to make large, transparent, antialiased points
Appearance app = new Appearance();
// increase the size of each point and turn on AA
// PointAttributes pa = new PointAttributes(3.0f, true);
// app.setPointAttributes(pa);
// set up transparency
TransparencyAttributes ta = new TransparencyAttributes();
ta.setTransparencyMode(TransparencyAttributes.NICEST);
ta.setTransparency(0.5f); // used if color is not COLOR_4
app.setTransparencyAttributes(ta);
PointArray pointCloud = new PointArray(Jcoords.length,
PointArray.COORDINATES | PointArray.COLOR_4);
pointCloud.setCoordinates(0, Jcoords);
pointCloud.setColors(0, Jcolors);
pointCloud.setCapability(PointArray.ALLOW_COORDINATE_WRITE);
// Point size 10
PointAttributes pa = new PointAttributes(pointsize, true);
app.setPointAttributes(pa);
// Make Shape
Shape3D pointCloudShape = new Shape3D(pointCloud, app);
// Create BranchGroup MyRoot
BranchGroup MyRoot = new BranchGroup();
Transform3D zTrans = new Transform3D();
// zTrans.set(new Vector3f(0.0f, 0.0f, -1.0f));
Jpivot.negate();
zTrans.set(Jpivot);
TransformGroup objTrans = new TransformGroup(zTrans);
objTrans.addChild(pointCloudShape);
MyRoot.addChild(objTrans);
// Content-Branch optimieren und zurueckgeben
MyRoot.compile();
MyUniverse.addBranchGraph(MyRoot);
//return pointCloudShape;
return pointCloud;
}
//public Shape3D movePoints(Shape3D pointCloudShape, float Coords[][]) {
public PointArray movePoints(PointArray pointCloud, float Coords[][]) {
// Convert MATLAB float to Java Data Types
Point3f Jcoords[] = new Point3f[Coords.length];
for (int i = 0; i < Coords.length; i++) {
Jcoords[i] = new Point3f(Coords[i][0], Coords[i][1], Coords[i][2]);
}
// return pointCloudShape;
return pointCloud;
}
public Shape3D createLines(float fromCoords[][], float toCoords[][],
float Colors[][], float linesize, float pivot[]) {
// Convert MATLAB float to Java Data Types
Vector3f Jpivot = new Vector3f(pivot[0], pivot[1], pivot[2]);
Point3f JCoords[] = new Point3f[toCoords.length * 2];
Color4f JColors[] = new Color4f[Colors.length * 2];
for (int i = 0; i < fromCoords.length; i++) {
JCoords[i * 2] = new Point3f(fromCoords[i][0], fromCoords[i][1],
fromCoords[i][2]);
JCoords[i * 2 + 1] = new Point3f(toCoords[i][0], toCoords[i][1],
toCoords[i][2]);
// x-Achse zeigt nach oben, y-Achse nach rechts:
JColors[i * 2] = new Color4f(Colors[i][0], Colors[i][1],
Colors[i][2], Colors[i][3]);
JColors[i * 2 + 1] = new Color4f(Colors[i][0], Colors[i][1],
Colors[i][2], Colors[i][3]);
}
// Set Appearance
Appearance app = new Appearance();
// // Transparency
TransparencyAttributes ta = new TransparencyAttributes();
ta.setTransparencyMode(TransparencyAttributes.NICEST);
ta.setTransparency(1.0f); // used if color is not COLOR_4
app.setTransparencyAttributes(ta);
// // SetLinesize and Pattern (SOLID, DASH, DOT)
LineAttributes la = new LineAttributes(linesize,
LineAttributes.PATTERN_SOLID, true);
app.setLineAttributes(la);
// Create Line Array
LineArray dot = new LineArray(JCoords.length, LineArray.COORDINATES
| LineArray.COLOR_4);
// System.out.println(JCoords[0]);
dot.setCoordinates(0, JCoords, 0, JCoords.length);
dot.setColors(0, JColors, 0, JColors.length);
// Make Shape
Shape3D dotShape = new Shape3D(dot, app);
// Create BranchGroup MyRoot
BranchGroup MyRoot = new BranchGroup();
Transform3D zTrans = new Transform3D();
Jpivot.negate(); // move Object Pivot to Universe(0,0,0)
zTrans.set(Jpivot);
TransformGroup objTrans = new TransformGroup(zTrans);
objTrans.addChild(dotShape);
MyRoot.addChild(objTrans);
// Content-Branch optimieren und zurueckgeben
MyRoot.compile();
MyUniverse.addBranchGraph(MyRoot);
return dotShape;
}
public static void main(String[] args) {
// Init some Values
float colors[][] = new float[8][4];
float coords[][] = new float[8][3];
colors[0][0] = 0.0f; colors[0][1] = 0.0f; colors[0][2] = 0.0f; colors[0][3] = 1.0f;
colors[1][0] = 1.0f; colors[1][1] = 0.0f; colors[1][2] = 0.0f; colors[1][3] = 1.0f;
colors[2][0] = 0.0f; colors[2][1] = 1.0f; colors[2][2] = 0.0f; colors[2][3] = 1.0f;
colors[3][0] = 0.0f; colors[3][1] = 0.0f; colors[3][2] = 1.0f; colors[3][3] = 1.0f;
colors[4][0] = 1.0f; colors[4][1] = 1.0f; colors[4][2] = 0.0f; colors[4][3] = 1.0f;
colors[5][0] = 0.0f; colors[5][1] = 1.0f; colors[5][2] = 1.0f; colors[5][3] = 1.0f;
colors[6][0] = 1.0f; colors[6][1] = 0.0f; colors[6][2] = 1.0f; colors[6][3] = 1.0f;
colors[7][0] = 1.0f; colors[7][1] = 1.0f; colors[7][2] = 1.0f; colors[7][3] = 1.0f;
coords[0][0] = 0.0f; coords[0][1] = 0.0f; coords[0][2] = 0.0f;
coords[1][0] = 1.0f; coords[1][1] = 0.0f; coords[1][2] = 0.0f;
coords[2][0] = 0.0f; coords[2][1] = 1.0f; coords[2][2] = 0.0f;
coords[3][0] = 0.0f; coords[3][1] = 0.0f; coords[3][2] = 1.0f;
coords[4][0] = 1.0f; coords[4][1] = 1.0f; coords[4][2] = 0.0f;
coords[5][0] = 0.0f; coords[5][1] = 1.0f; coords[5][2] = 1.0f;
coords[6][0] = 1.0f; coords[6][1] = 0.0f; coords[6][2] = 1.0f;
coords[7][0] = 1.0f; coords[7][1] = 1.0f; coords[7][2] = 1.0f;
float pivot[] = new float[3];
pivot[0] = 0.5f; pivot[1] = 0.5f; pivot[2] = 0.5f;
// Create Window
scatterJ3D MyGFX = new scatterJ3D(800, 600, "Trallala");
MyGFX.setVisible(true);
// Load Points
PointArray MyPoints1 = MyGFX.createPoints(coords, colors, 15, pivot);
// Init Values for Lines
float lscoords[][] = new float[4][3];
lscoords[0][0] = 0.0f;lscoords[0][1] = 0.0f;lscoords[0][2] = 0.0f;
lscoords[1][0] = 0.0f;lscoords[1][1] = 0.0f;lscoords[1][2] = 0.0f;
lscoords[2][0] = 0.0f;lscoords[2][1] = 0.0f;lscoords[2][2] = 0.0f;
lscoords[3][0] = 0.0f;lscoords[3][1] = 0.0f;lscoords[3][2] = 0.0f;
float ldcoords[][] = new float[4][3];
ldcoords[0][0] = 1.5f;ldcoords[0][1] = 0.0f;ldcoords[0][2] = 0.0f;
ldcoords[1][0] = 0.0f;ldcoords[1][1] = 1.5f;ldcoords[1][2] = 0.0f;
ldcoords[2][0] = 0.0f;ldcoords[2][1] = 0.0f;ldcoords[2][2] = 1.5f;
ldcoords[3][0] = 1.0f;ldcoords[3][1] = 1.0f;ldcoords[3][2] = 1.0f;
float lcolors[][] = new float[4][4];
lcolors[0][0] = 1.0f;lcolors[0][1] = 0.0f;lcolors[0][2] = 0.0f;lcolors[0][3] = 1.0f;
lcolors[1][0] = 0.0f;lcolors[1][1] = 1.0f;lcolors[1][2] = 0.0f;lcolors[1][3] = 1.0f;
lcolors[2][0] = 0.2f;lcolors[2][1] = 0.2f;lcolors[2][2] = 1.0f;lcolors[2][3] = 1.0f;
lcolors[3][0] = 1.0f;lcolors[3][1] = 1.0f;lcolors[3][2] = 1.0f;lcolors[3][3] = 1.0f;
// Load Lines
MyGFX.createLines(lscoords, ldcoords, lcolors, 2, pivot);
// Set Background color
MyGFX.setBackgroundColor(0.5f, 0.5f, 0.5f);
MyGFX.setView("rgb");
}
}
最佳答案
根据 View 的 javadoc,“前裁剪距离 必须大于 0.0”。如果渲染到屏幕窗口中,我更喜欢“VIRTUAL_EYE”剪辑策略。
将可见性策略从默认状态“VISIBILITY_DRAW_VISIBLE”更改为“VISIBILITY_DRAW_ALL”可能对您的程序没有影响。当使用 RenderingAttributes 并且根据“setVisible(boolean visible)”禁用可见性时,这是相关的。
您的程序在进行以下更改后运行良好:
// Set near Plane clipping
View myview = c.getView();
myview.setFrontClipDistance(0.1f); // was 0.0f
myview.setBackClipDistance(100.0f);
//myview.setVisibilityPolicy(View.VISIBILITY_DRAW_ALL);
myview.setBackClipPolicy(View.VIRTUAL_EYE);
myview.setFrontClipPolicy(View.VIRTUAL_EYE);
八月
关于matlab - Java 3D : Scenegraph disappears from some viewing positions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13930979/
在 Matlab 中,您可以选择创建新的“示例”脚本文件以及脚本、函数、类等。创建它们时,它们会获得一个脚本图标。 它们与其他标准脚本文件的处理方式有何不同? 是否有关于这些示例脚本类型的预期用途的文
我正在运行一个不是我自己编写的大 m 文件,它依赖于某些子函数。我想知道是否在所有嵌套函数的任何地方都使用了特定函数(在我的例子中是函数 eig.m(计算特征值))。有没有快速的方法来做到这一点? 亲
Matlab中有一个函数叫 copulafit .我怎样才能看到这个函数背后的代码?许多 Python 的 numpy 和 scipy 函数在 Github 上很容易开源,但由于某种原因我在 Gith
我定义了一个抽象基类measurementHandler < handle它定义了所有继承类的接口(interface)。这个类的两个子类是a < measurementHandler和 b < me
假设有一个矩阵 A = 1 3 2 4 4 2 5 8 6 1 4 9 例如,我有一个 Vector 包含该矩阵每一列的“类”
我有一个在后台运行的 Matlab 脚本。随着计算的进行,它会不断弹出进度栏窗口。这很烦人。 问题是我没有自己写 Matlab 脚本,这是一段很长很复杂的代码,我不想搞砸。那么如何在不修改 Matla
有没有办法从一个 matlab 程序中检测计算机上正在运行多少个 matlab 进程? 我想要恰好有 n 个 matlab 进程在运行。如果我的数量太少,我想创建它们,如果数量太多,我想杀死一些。您当
我正在测试我们在 Matlab 中开发的一个独立应用程序,当时我注意到它的内存使用量(根据 Windows 任务管理器)达到了 16gb 以上的数倍峰值。我决定在编译版本后面的脚本上使用 profil
我面临着一个相当棘手的问题。在 Matlab 中,命令 S = char(1044) 将俄语字母 д 放入变量 S。但是 disp(S) 返回空白符号,尽管内容实际上是正确的: >> S = char
我在这行 MATLAB 代码中遇到内存不足错误: result = (A(1:xmax,1:ymax,1:zmax) .* B(2:xmax+1,2:ymax+1,2:zmax+1) +
我正在寻找一种在 MATLAB 中比较有限顺序数据与非确定性顺序的方法。基本上,我想要的是一个数组,但不对包含的元素强加顺序。如果我有对象 a = [x y z]; 和 b = [x z y]; 我希
我有一个由 1 和 0 组成的二维矩阵。 mat = [0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 1 0 0 0 1 0 1 1 0 0 1]; 我需
我可以在 Matlab 中用一组 x,y 点绘制回归线。但是,如果我有一组点(如下图),假设我有四组点,我想为它们绘制四条回归线……我该怎么做?所有的点都保存在 x,y 中。没有办法将它们分开并将它们
我正在尝试使用以下代码在 MATLAB 中绘制圆锥体。但是,当 MATLAB 生成绘图时,曲面中有一个间隙,如下图所示。谁能建议关闭它的方法? clearvars; close all; clc; [
我有一个 map称为 res_Map,包含一组不同大小的数组。我想找到用于存储 res_Map 的总内存。 正如您在下面看到的,看起来 res_Map 几乎不占用内存,而 res_Map 中的各个元素
有没有办法在 MATLAB 中组合 2 个向量,这样: mat = zeros(length(C),length(S)); for j=1:length(C) mat(j,:)=C(j)*S;
已结束。此问题不符合 Stack Overflow guidelines 。它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答它。 关闭 5 年前
我正在尝试将MatLab中的t copula适配到我的数据,并且我的功能是: u = ksdensity(range_1, range_1,'function','cdf'); v = ksdens
大家好,我目前正在尝试使用论文“多尺度形态学图像简化”中的 SMMT 运算符 Dorini .由于没有订阅无法访问该页面,因此我将相关详细信息发布在这里: 请注意,我将相关文章的部分内容作为图片发布。
我在MATLAB中编写代码,需要使用一个名为modwt的函数,该函数同时存在于两个我同时使用的工具箱(Wavelet和WMTSA)中。问题在于,一个版本仅返回一个输出,而另一个版本则返回三个输出。我应
我是一名优秀的程序员,十分优秀!