Java 类javax.vecmath.Matrix4d 实例源码
项目:Pogamut3
文件:AffineTransform3D.java
public AffineTransform3D(double[] coeficients) {
matrix = new Matrix4d();
if (coeficients.length==9) {
matrix.set(new Matrix3d(coeficients));
} else if (coeficients.length==12) {
double[] extendedCoeficients = new double[16];
for (int i=0; i<coeficients.length; ++i) {
extendedCoeficients[i] = coeficients[i];
}
extendedCoeficients[12] = 0;
extendedCoeficients[13] = 0;
extendedCoeficients[14] = 0;
extendedCoeficients[15] = 1;
matrix.set(extendedCoeficients);
}
}
项目:Pogamut3
文件:AffineTransform3D.java
public AffineTransform3D(
double xx, double yx, double zx, double tx,
double xy, double yy, double zy, double ty,
double xz, double yz, double zz, double tz
) {
matrix = new Matrix4d();
matrix.m00 = xx;
matrix.m01 = yx;
matrix.m02 = zx;
matrix.m03 = tx;
matrix.m10 = xy;
matrix.m11 = yy;
matrix.m12 = zy;
matrix.m13 = ty;
matrix.m20 = xz;
matrix.m21 = yz;
matrix.m22 = zz;
matrix.m23 = tz;
matrix.m30 = 0;
matrix.m31 = 0;
matrix.m32 = 0;
matrix.m33 = 1;
}
项目:chordatlas
文件:Prof.java
public static Prof buildProfile( Line3d oLine, Point3d cen ) {
Matrix4d to2D = new Matrix4d();
Vector3d c2 = oLine.dir(), c3 = new Vector3d();
c2.normalize();
c3.cross( c2, UP );
to2D.setIdentity();
to2D.setRow( 0, c3.x, c3.y, c3.z, 0 );
to2D.setRow( 1, UP.x, UP.y, UP.z, 0 );
to2D.setRow( 2, c2.x, c2.y, c2.z, 0 );
{
Point3d start = new Point3d( cen.x, 0, cen.z );
to2D.transform( start );
to2D.m03 = -start.x;
to2D.m13 = -start.y;
to2D.m23 = -start.z;
to2D.m33 = 1;
}
Prof monotonic = new Prof(to2D, c2);
return monotonic;
}
项目:chordatlas
文件:MiniGen.java
private boolean inBounds( Matrix4d mini, List<double[]> bounds ) {
// mini matrix is in mini-mesh format: a translation from a 255^3 cube in the first quadrant
// trans.offset is a transform from that space, into jme rendered space (cartesian in meters, around the origin)
Matrix4d m = new Matrix4d();
m.mul( Jme3z.fromMatrix ( trans.offset ), mini );
for (Point2d p : Arrays.stream( cubeCorners ).map( c -> {
Point3d tmp = new Point3d();
m.transform( c, tmp );
return new Point2d(tmp.x, tmp.z);
}).collect( Collectors.toList() ) ) {
for (double[] bound : bounds) {
if (
bound[0] < p.x && bound[1] > p.x &&
bound[2] < p.y && bound[3] > p.y )
return true;
}
}
return false;
}
项目:eplmp
文件:VirtualInstanceCollectionMessageBodyWriter.java
@Override
public void writeTo(VirtualInstanceCollection virtualInstanceCollection, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws UnsupportedEncodingException {
String charSet = "UTF-8";
JsonGenerator jg = Json.createGenerator(new OutputStreamWriter(entityStream, charSet));
jg.writeStartArray();
Matrix4d gM = new Matrix4d();
gM.setIdentity();
PartLink virtualRootPartLink = getVirtualRootPartLink(virtualInstanceCollection);
List<PartLink> path = new ArrayList<>();
path.add(virtualRootPartLink);
InstanceBodyWriterTools.generateInstanceStreamWithGlobalMatrix(productService, path, gM, virtualInstanceCollection, new ArrayList<>(), jg);
jg.writeEnd();
jg.flush();
}
项目:eplmp
文件:InstanceBodyWriterTools.java
static Matrix4d combineTransformation(Matrix4d matrix, Vector3d translation, Vector3d rotation) {
Matrix4d gM = new Matrix4d(matrix);
Matrix4d m = new Matrix4d();
m.setIdentity();
m.setTranslation(translation);
gM.mul(m);
m.setIdentity();
m.rotZ(rotation.z);
gM.mul(m);
m.setIdentity();
m.rotY(rotation.y);
gM.mul(m);
m.setIdentity();
m.rotX(rotation.x);
gM.mul(m);
return gM;
}
项目:eplmp
文件:InstanceBodyWriterTools.java
private static void writeLeaf(List<PartLink> currentPath, List<Integer> copyInstanceIds, PartIteration partI, Matrix4d combinedMatrix, JsonGenerator jg) {
String partIterationId = partI.toString();
List<InstanceAttributeDTO> attributes = new ArrayList<>();
for (InstanceAttribute attr : partI.getInstanceAttributes()) {
attributes.add(mapper.map(attr, InstanceAttributeDTO.class));
}
jg.writeStartObject();
jg.write("id", Tools.getPathInstanceAsString(currentPath, copyInstanceIds));
jg.write("partIterationId", partIterationId);
jg.write("path", Tools.getPathAsString(currentPath));
writeMatrix(combinedMatrix, jg);
writeGeometries(partI.getSortedGeometries(), jg);
writeAttributes(attributes, jg);
jg.writeEnd();
jg.flush();
}
项目:CodeChickenLib
文件:Matrix4.java
public Matrix4 set(Matrix4d mat) {
m00 = mat.m00;
m01 = mat.m01;
m02 = mat.m02;
m03 = mat.m03;
m10 = mat.m10;
m11 = mat.m11;
m12 = mat.m12;
m13 = mat.m13;
m20 = mat.m20;
m21 = mat.m21;
m22 = mat.m22;
m23 = mat.m23;
m30 = mat.m30;
m31 = mat.m31;
m32 = mat.m32;
m33 = mat.m33;
return this;
}
项目:openwonderland
文件:CellTransform.java
/**
* Multiply this transform by t1. This transform will be update
* and the result returned
*
* @param transform
* @return this
*/
public CellTransform mul(CellTransform in) {
// This does not work when scale!=1
// this.scale *= in.scale;
// this.translation.addLocal(rotation.mult(in.translation).multLocal(in.scale));
// this.rotation.multLocal(in.rotation);
// Correctly calculate the multiplication.
Quat4d q = new Quat4d(rotation.x, rotation.y, rotation.z, rotation.w);
Vector3d t = new Vector3d(translation.x, translation.y, translation.z);
Matrix4d m = new Matrix4d(q,t,scale);
Quat4d q1 = new Quat4d(in.rotation.x, in.rotation.y, in.rotation.z, in.rotation.w);
Vector3d t1 = new Vector3d(in.translation.x, in.translation.y, in.translation.z);
Matrix4d m1 = new Matrix4d(q1,t1,in.scale);
m.mul(m1);
m.get(q);
m.get(t);
scale = (float)m.getScale();
rotation.set((float)q.x, (float)q.y, (float)q.z, (float)q.w);
translation.set((float)t.x, (float)t.y, (float)t.z);
return this;
}
项目:gama
文件:GeomMathUtils.java
static public DoubleBuffer getDoubleBuffer(final Matrix4d matrix) {
final DoubleBuffer result = DoubleBuffer.allocate(16);
result.put(0, matrix.m00);
result.put(1, matrix.m01);
result.put(2, matrix.m02);
result.put(3, matrix.m03);
result.put(4, matrix.m10);
result.put(5, matrix.m11);
result.put(6, matrix.m12);
result.put(7, matrix.m13);
result.put(8, matrix.m20);
result.put(9, matrix.m21);
result.put(10, matrix.m22);
result.put(11, matrix.m23);
result.put(12, matrix.m30);
result.put(13, matrix.m31);
result.put(14, matrix.m32);
result.put(15, matrix.m33);
return result;
}
项目:gama
文件:GeomMathUtils.java
static public double[] getDoubleArray(final Matrix4d matrix) {
final double[] result = new double[16];
result[0] = matrix.m00;
result[1] = matrix.m01;
result[2] = matrix.m02;
result[3] = matrix.m03;
result[4] = matrix.m10;
result[5] = matrix.m11;
result[6] = matrix.m12;
result[7] = matrix.m13;
result[8] = matrix.m20;
result[9] = matrix.m21;
result[10] = matrix.m22;
result[11] = matrix.m23;
result[12] = matrix.m30;
result[13] = matrix.m31;
result[14] = matrix.m32;
result[15] = matrix.m33;
return result;
}
项目:UT4Converter
文件:Geometry.java
/**
* Make rotate input vector with Yaw(Z),Pitch(Y) and Roll(X) unreal rotation
* values in the YXZ UT Editor coordinate system.
* +00576.000000,+01088.000000,+00192.000000 ->
* -00192.000000,+00064.000000,+00192.000000
*
* @param v
* @param pitch
* Pitch in Unreal Value (65536 u.v. = 360°)
* @param yaw
* Yaw
* @param roll
* @return
*/
public static Vector3d rotate(Vector3d v, double pitch, double yaw, double roll) {
pitch = UE12AngleToDegree(pitch);
yaw = UE12AngleToDegree(yaw);
roll = UE12AngleToDegree(roll);
// TODO only divide by 360 if rotation values comes from Unreal Engine
// 1/2
double rot_x = ((roll) / 360D) * 2D * Math.PI; // Roll=Axis X with
// Unreal Editor
double rot_y = (((pitch)) / 360D) * 2D * Math.PI; // Pitch=Axis Y with
// Unreal Editor
double rot_z = ((yaw) / 360D) * 2D * Math.PI; // Yaw=Axis Z with Unreal
// Editor
double tmp[] = new double[] { v.x, v.y, v.z, 1D };
Matrix4d m4d = getGlobalRotationMatrix(rot_x, rot_y, rot_z);
tmp = getRot(tmp, m4d);
v.x = tmp[0];
v.y = tmp[1];
v.z = tmp[2];
return v;
}
项目:UT4Converter
文件:Geometry.java
/**
*
* @param rot_x
* @param rot_y
* @param rot_z
* @return
*/
private static Matrix4d getGlobalRotationMatrix(double rot_x, double rot_y, double rot_z) {
Matrix4d m4d;
// Checked
Matrix4d m4d_x = new Matrix4d(1D, 0D, 0D, 0D, 0D, Math.cos(rot_x), -Math.sin(rot_x), 0D, 0D, Math.sin(rot_x), Math.cos(rot_x), 0D, 0D, 0D, 0D, 1D);
// Checked
Matrix4d m4d_y = new Matrix4d(Math.cos(rot_y), 0D, Math.sin(rot_y), 0D, 0D, 1D, 0D, 0D, -Math.sin(rot_y), 0, Math.cos(rot_y), 0D, 0D, 0D, 0D, 1D);
// Checked
Matrix4d m4d_z = new Matrix4d(Math.cos(rot_z), Math.sin(rot_z), 0D, 0D, -Math.sin(rot_z), Math.cos(rot_z), 0D, 0D, 0D, 0D, 1D, 0D, 0D, 0D, 0D, 1D);
m4d_x = updateMatrix(m4d_x);
m4d_y = updateMatrix(m4d_y);
m4d_z = updateMatrix(m4d_z);
m4d = m4d_x;
m4d.mul(m4d_y);
m4d.mul(m4d_z);
return m4d;
}
项目:UT4Converter
文件:Geometry.java
private static double[] getRot(double[] d2, Matrix4d m4d) {
double d[] = new double[] { d2[0], d2[1], d2[2], 1D };
double dx = m4d.m00 * d[0] + m4d.m10 * d[1] + m4d.m20 * d[2] + m4d.m30 * d[3];
double dy = m4d.m01 * d[0] + m4d.m11 * d[1] + m4d.m21 * d[2] + m4d.m31 * d[3];
double dz = m4d.m02 * d[0] + m4d.m12 * d[1] + m4d.m22 * d[2] + m4d.m32 * d[3];
if (Math.abs(dx) < 0.00001D) {
dx = 0D;
}
if (Math.abs(dy) < 0.00001D) {
dy = 0D;
}
if (Math.abs(dz) < 0.00001D) {
dz = 0D;
}
return new double[] { dx, dy, dz };
}
项目:vzome-desktop
文件:TrackballRenderingViewer.java
public TrackballRenderingViewer( CameraController.Viewer delegate )
{
this .delegate = delegate;
this .translation = new Vector3d();
Matrix4d matrix = new Matrix4d();
Camera defaultCamera = new Camera();
defaultCamera .setMagnification( 1.0f );
defaultCamera .getViewTransform( matrix, 0d );
matrix .get( translation ); // save the default translation to apply on every update below
// set the perspective view just once
double near = defaultCamera .getNearClipDistance();
double far = defaultCamera .getFarClipDistance();
double fov = defaultCamera .getFieldOfView();
this .delegate .setPerspective( fov, 1.0d, near, far );
}
项目:vzome-desktop
文件:Java2dExporter.java
/**
* @param v[]
* @param colors
* @param lights
* @param model
*/
public Java2dExporter( Camera view, Colors colors, Lights lights, RenderedModel model )
{
super( view, colors, lights, model );
this .view = view;
Matrix4d viewMatrix = new Matrix4d();
this .view .getViewTransform( viewMatrix, 0d );
this .viewTransform = new Transform3D( viewMatrix );
for ( int i = 0; i < lightDirs.length; i++ ) {
lightDirs[ i ] = new Vector3f();
// the next line fills in the direction, as well as returning the color... bad style!
lightColors[ i ] = new Color( mLights .getDirectionalLight( i, lightDirs[ i ] ) .getRGB() );
// the lights stay fixed relative to the viewpoint, so we must not apply the view transform
lightDirs[ i ] .normalize();
lightDirs[ i ] .negate();
}
ambientLight = new Color( mLights .getAmbientColor() .getRGB() );
}
项目:vzome-desktop
文件:Java2dExporter.java
/**
* Given a point in world coordinates, adjust it in place to be in
* screen coordinates (after projection).
*
* @param point
*/
public void mapWorldToScreen( Camera view, Point3f point )
{
Matrix4d viewMatrix = new Matrix4d();
this .view .getViewTransform( viewMatrix, 0d );
Transform3D viewTrans = new Transform3D( viewMatrix );
viewTrans .transform( point );
// point is now in view coordinates
Vector4f p4 = new Vector4f( point.x, point.y, point.z, 1f );
Transform3D eyeTrans = new Transform3D();
if ( ! view .isPerspective() ) {
double edge = view .getWidth() / 2;
eyeTrans .ortho( -edge, edge, -edge, edge, view .getNearClipDistance(), view .getFarClipDistance() );
}
else
eyeTrans .perspective( view .getFieldOfView(), 1.0d, view .getNearClipDistance(), view .getFarClipDistance() );
// TODO - make aspect ratio track the screen window shape
eyeTrans .transform( p4 );
point .project( new Point4f( p4 ) );
}
项目:vzome-desktop
文件:CameraController.java
private void updateViewersTransformation()
{
if ( mViewers .size() == 0 )
return;
Matrix4d trans = new Matrix4d();
model .getViewTransform( trans, 0d );
trans .invert();
for ( int i = 0; i < mViewers .size(); i++ )
mViewers .get( i ) .setViewTransformation( trans, Viewer .MONOCULAR );
model .getStereoViewTransform( trans, Viewer .LEFT_EYE );
trans .invert();
for ( int i = 0; i < mViewers .size(); i++ )
mViewers .get( i ) .setViewTransformation( trans, Viewer .LEFT_EYE );
model .getStereoViewTransform( trans, Viewer .RIGHT_EYE );
trans .invert();
for ( int i = 0; i < mViewers .size(); i++ )
mViewers .get( i ) .setViewTransformation( trans, Viewer .RIGHT_EYE );
}
项目:FX3DAndroid
文件:Transform.java
/**
* Applies a mirror operation to this transform.
*
* @param plane the plane that defines the mirror operation
*
* @return this transform
*/
public Transform mirror(Plane plane) {
System.err.println("WARNING: I'm too dumb to implement the mirror() operation correctly. Please fix me!");
double nx = plane.normal.x;
double ny = plane.normal.y;
double nz = plane.normal.z;
double w = plane.dist;
double elemenents[] = {
(1.0 - 2.0 * nx * nx), (-2.0 * ny * nx), (-2.0 * nz * nx), 0,
(-2.0 * nx * ny), (1.0 - 2.0 * ny * ny), (-2.0 * nz * ny), 0,
(-2.0 * nx * nz), (-2.0 * ny * nz), (1.0 - 2.0 * nz * nz), 0,
(-2.0 * nx * w), (-2.0 * ny * w), (-2.0 * nz * w), 1
};
m.mul(new Matrix4d(elemenents));
return this;
}
项目:vzome-core
文件:Camera.java
/**
* Get the mapping from view to world coordinates
* @param trans
*/
public void getViewTransform( Matrix4d matrix, double angle )
{
Point3d eyePoint = new Point3d( mLookAtPoint );
Vector3d dir = new Vector3d( mLookDirection );
if ( angle != 0d ) {
double[] rotMat = new double[16];
AxisAngle4d rotAA = new AxisAngle4d( mUpDirection, angle );
set( rotAA, rotMat );
transform( rotMat, dir );
}
dir .scale( -mDistance );
eyePoint .add( dir );
double[] mat = new double[16];
lookAt( mat, eyePoint, mLookAtPoint, mUpDirection );
matrix .set( mat );
}
项目:FormulaMorph
文件:Gallery.java
protected void setDefaults( CPUAlgebraicSurfaceRenderer asr )
{
asr.getCamera().loadProperties( defaults, "camera_", "" );
Util.setOptimalCameraDistance( asr.getCamera() );
for( int i = 0; i < AlgebraicSurfaceRenderer.MAX_LIGHTS; i++ )
{
asr.getLightSource( i ).setStatus(LightSource.Status.OFF);
asr.getLightSource( i ).loadProperties( defaults, "light_", "_" + i );
}
asr.setBackgroundColor( BasicIO.fromColor3fString( defaults.getProperty( "background_color" ) ) );
// identity.setIdentity();
// asr.setTransform( BasicIO.fromMatrix4dString( defaults.getProperty( "rotation_matrix" ) ) );
Matrix4d scaleMatrix = new Matrix4d();
scaleMatrix.setIdentity();
scaleMatrix.setScale( 1.0 / Double.parseDouble( defaults.getProperty( "scale_factor" ) ) );
asr.setSurfaceTransform( scaleMatrix );
asr.setAntiAliasingMode( AntiAliasingMode.ADAPTIVE_SUPERSAMPLING );
asr.setAntiAliasingPattern( AntiAliasingPattern.RG_2x2 );
}
项目:jvircam
文件:PMatrix.java
public void setMatrix(Matrix4d p) {
this.spinner11.setValue(p.m00);
this.spinner12.setValue(p.m01);
this.spinner13.setValue(p.m02);
this.spinner14.setValue(p.m03);
//
this.spinner21.setValue(p.m10);
this.spinner22.setValue(p.m11);
this.spinner23.setValue(p.m12);
this.spinner24.setValue(p.m13);
//
this.spinner31.setValue(p.m20);
this.spinner32.setValue(p.m21);
this.spinner33.setValue(p.m22);
this.spinner34.setValue(p.m23);
}
项目:vzome-desktop
文件:TrackballRenderingViewer.java
public TrackballRenderingViewer( CameraController.Viewer delegate )
{
this .delegate = delegate;
this .translation = new Vector3d();
Matrix4d matrix = new Matrix4d();
Camera defaultCamera = new Camera();
defaultCamera .setMagnification( 1.0f );
defaultCamera .getViewTransform( matrix, 0d );
matrix .get( translation ); // save the default translation to apply on every update below
// set the perspective view just once
double near = defaultCamera .getNearClipDistance();
double far = defaultCamera .getFarClipDistance();
double fov = defaultCamera .getFieldOfView();
this .delegate .setPerspective( fov, 1.0d, near, far );
}
项目:vzome-desktop
文件:Java2dExporter.java
/**
* @param v[]
* @param colors
* @param lights
* @param model
*/
public Java2dExporter( Camera view, Colors colors, Lights lights, RenderedModel model )
{
super( view, colors, lights, model );
this .view = view;
Matrix4d viewMatrix = new Matrix4d();
this .view .getViewTransform( viewMatrix, 0d );
this .viewTransform = new Transform3D( viewMatrix );
for ( int i = 0; i < lightDirs.length; i++ ) {
lightDirs[ i ] = new Vector3f();
// the next line fills in the direction, as well as returning the color... bad style!
lightColors[ i ] = new Color( mLights .getDirectionalLight( i, lightDirs[ i ] ) .getRGB() );
// the lights stay fixed relative to the viewpoint, so we must not apply the view transform
lightDirs[ i ] .normalize();
lightDirs[ i ] .negate();
}
ambientLight = new Color( mLights .getAmbientColor() .getRGB() );
}
项目:vzome-desktop
文件:Java2dExporter.java
/**
* Given a point in world coordinates, adjust it in place to be in
* screen coordinates (after projection).
*
* @param point
*/
public void mapWorldToScreen( Camera view, Point3f point )
{
Matrix4d viewMatrix = new Matrix4d();
this .view .getViewTransform( viewMatrix, 0d );
Transform3D viewTrans = new Transform3D( viewMatrix );
viewTrans .transform( point );
// point is now in view coordinates
Vector4f p4 = new Vector4f( point.x, point.y, point.z, 1f );
Transform3D eyeTrans = new Transform3D();
if ( ! view .isPerspective() ) {
double edge = view .getWidth() / 2;
eyeTrans .ortho( -edge, edge, -edge, edge, view .getNearClipDistance(), view .getFarClipDistance() );
}
else
eyeTrans .perspective( view .getFieldOfView(), 1.0d, view .getNearClipDistance(), view .getFarClipDistance() );
// TODO - make aspect ratio track the screen window shape
eyeTrans .transform( p4 );
point .project( new Point4f( p4 ) );
}
项目:vzome-desktop
文件:CameraController.java
private void updateViewersTransformation()
{
if ( mViewers .size() == 0 )
return;
Matrix4d trans = new Matrix4d();
model .getViewTransform( trans, 0d );
trans .invert();
for ( int i = 0; i < mViewers .size(); i++ )
mViewers .get( i ) .setViewTransformation( trans, Viewer .MONOCULAR );
model .getStereoViewTransform( trans, Viewer .LEFT_EYE );
trans .invert();
for ( int i = 0; i < mViewers .size(); i++ )
mViewers .get( i ) .setViewTransformation( trans, Viewer .LEFT_EYE );
model .getStereoViewTransform( trans, Viewer .RIGHT_EYE );
trans .invert();
for ( int i = 0; i < mViewers .size(); i++ )
mViewers .get( i ) .setViewTransformation( trans, Viewer .RIGHT_EYE );
}
项目:SiJaRayCluster
文件:Camera.java
/**
* Creates a new instance of Camera
*
* @param eyePoint
* the eyePoint in world coordinates. Origin of the rays.
* @param lookAtPoint
* the point we look at world coordinates.
* @param upVector
* the vector giving the up direction.
* @param dist
* distance between eyepoint and view plane.
* @param size
* height of the view plane.
*/
public Camera(Point3d eyePoint, Point3d lookAtPoint, Vector3d upVector,
double dist, double size) {
super();
eye = eyePoint;
lookAt = lookAtPoint;
up = upVector;
Point3d nouveau = ((Point3d) eye.clone());
nouveau.sub(lookAt);
n = new Vector3d(-nouveau.x, -nouveau.y, -nouveau.z);
n.normalize();
u = new Vector3d();
u.cross(up, n);
u.normalize();
v = new Vector3d();
v.cross(n, u);
matrix = new Matrix4d(u.x, u.y, u.z, -1
* u.dot(new Vector3d(eye.x, eye.y, eye.z)), v.x, v.y, v.z, -1
* v.dot(new Vector3d(eye.x, eye.y, eye.z)), n.x, n.y, n.z, -1
* n.dot(new Vector3d(eye.x, eye.y, eye.z)), 0, 0, 0, 1);
distanceEyeVpn = dist;
heightVpn = size;
eyeFixed = false;
lookAtFixed = false;
;
}
项目:SiJaRayCluster
文件:Camera.java
/**
* Update the parameters of the camera when points have been changed.
*/
public void updateParameters() {
// update paramaters
Point3d nouveau = ((Point3d) eye.clone());
nouveau.sub(lookAt);
n = new Vector3d(-nouveau.x, -nouveau.y, -nouveau.z);
n.normalize();
u = new Vector3d();
u.cross(up, n);
u.normalize();
v = new Vector3d();
v.cross(n, u);
matrix = new Matrix4d(u.x, u.y, u.z, -1
* u.dot(new Vector3d(eye.x, eye.y, eye.z)), v.x, v.y, v.z, -1
* v.dot(new Vector3d(eye.x, eye.y, eye.z)), n.x, n.y, n.z, -1
* n.dot(new Vector3d(eye.x, eye.y, eye.z)), 0, 0, 0, 1);
}
项目:biojava
文件:CECalculator.java
/** superimpose and get rmsd
*
* @param pro1
* @param pro2
* @param strLen Number of atoms from pro1 and pro2 to use
* @param storeTransform Store rotation and shift matrices locally
* @return RMSD
* @throws StructureException
*/
public double calc_rmsd(Atom[] pro1, Atom[] pro2, int strLen,
boolean storeTransform) throws StructureException {
Atom[] cod1 = getAtoms(pro1, strLen,false);
Atom[] cod2 = getAtoms(pro2, strLen,true);
Matrix4d trans = SuperPositions.superpose(Calc.atomsToPoints(cod1),
Calc.atomsToPoints(cod2));
Matrix matrix = Matrices.getRotationJAMA(trans);
Atom shift = Calc.getTranslationVector(trans);
if ( storeTransform) {
r = matrix;
t = shift;
}
for (Atom a : cod2)
Calc.transform(a.getGroup(), trans);
return Calc.rmsd(cod1, cod2);
}
项目:biojava
文件:MmtfUtils.java
/**
* Get a list of N 4*4 matrices from a single list of doubles of length 16*N.
* @param ncsOperMatrixList the input list of doubles
* @return the list of 4*4 matrics
*/
public static Matrix4d[] getNcsAsMatrix4d(double[][] ncsOperMatrixList) {
if(ncsOperMatrixList==null){
return null;
}
int numMats = ncsOperMatrixList.length;
if(numMats==0){
return null;
}
if(numMats==1 && ncsOperMatrixList[0].length==0){
return null;
}
Matrix4d[] outList = new Matrix4d[numMats];
for(int i=0; i<numMats; i++){
outList[i] = new Matrix4d(ncsOperMatrixList[i]);
}
return outList;
}
项目:asura-j
文件:GfMatrix.java
/**
* Sets the value of this matrix to that of the Matrix4d provided.
*
* @param m1
* the source matrix
*/
public final void set(Matrix4d m1) {
// This implementation is in 'no automatic size grow' policy.
// When size mismatch, exception will be thrown from the below.
elementData[0] = (float) m1.m00;
elementData[1] = (float) m1.m01;
elementData[2] = (float) m1.m02;
elementData[3] = (float) m1.m03;
elementData[nCol] = (float) m1.m10;
elementData[nCol + 1] = (float) m1.m11;
elementData[nCol + 2] = (float) m1.m12;
elementData[nCol + 3] = (float) m1.m13;
elementData[2 * nCol] = (float) m1.m20;
elementData[2 * nCol + 1] = (float) m1.m21;
elementData[2 * nCol + 2] = (float) m1.m22;
elementData[2 * nCol + 3] = (float) m1.m23;
elementData[3 * nCol] = (float) m1.m30;
elementData[3 * nCol + 1] = (float) m1.m31;
elementData[3 * nCol + 2] = (float) m1.m32;
elementData[3 * nCol + 3] = (float) m1.m33;
}
项目:biojava
文件:AFPTwister.java
/**
* Return the rmsd of the CAs between the input pro and this protein, at
* given positions. quite similar to transPdb but while that one transforms
* the whole ca2, this one only works on the res1 and res2 positions.
*
* Modifies the coordinates in the second set of Atoms (pro).
*
* @return rmsd of CAs
*/
private static double calCaRmsd(Atom[] ca1, Atom[] pro, int resn,
int[] res1, int[] res2) throws StructureException {
Atom[] cod1 = getAtoms(ca1, res1, resn, false);
Atom[] cod2 = getAtoms(pro, res2, resn, false);
if (cod1.length == 0 || cod2.length == 0) {
logger.info("length of atoms == 0!");
return 99;
}
Matrix4d transform = SuperPositions.superpose(Calc.atomsToPoints(cod1),
Calc.atomsToPoints(cod2));
for (Atom a : cod2)
Calc.transform(a.getGroup(), transform);
return Calc.rmsd(cod1, cod2);
}
项目:biojava
文件:TestCalc.java
@Test
public void testVecmathTransformation() {
Atom atom = getAtom(1.0, 1.0, 1.0);
//Identity transform
Matrix4d ident = new Matrix4d();
ident.setIdentity();
Calc.transform(atom, ident);
Point3d expected = new Point3d(1.0, 1.0, 1.0);
Point3d actual = atom.getCoordsAsPoint3d();
assertEquals(expected, actual);
//Sample transform
Matrix4d sample = getSampleTransform();
Calc.transform(atom, sample);
expected = new Point3d(2.0, 7.0, -1.3);
actual = atom.getCoordsAsPoint3d();
assertEquals(expected, actual);
}
项目:biojava
文件:CeSymmIterative.java
/**
* The symmetry axes of each level are recovered after the symmetry analysis
* iterations have finished, using the stored MultipleAlignment at each
* symmetry level.
* @return SymmetryAxes
*/
private SymmetryAxes recoverAxes(CeSymmResult result) {
SymmetryAxes axes = new SymmetryAxes();
for (int m = 0; m < levels.size(); m++) {
MultipleAlignment align = levels.get(m).getMultipleAlignment();
Matrix4d axis = align.getBlockSet(0).getTransformations().get(1);
SymmetryType type = levels.get(m).getAxes().getElementaryAxis(0).getSymmType();
int order = align.size();
axes.addAxis(axis, order, type);
}
return axes;
}
项目:biojava
文件:TestMmtfUtils.java
/**
* Test to check the conversion of BioassemblyInfo to a primitive map.
*/
@Test
public void testMakePrimitiveBioasembly() {
double[] testData = new double[] {0.0, 0.1, 0.2, 0.3,
1.0, 1.1, 1.2, 1.3,
2.0, 2.1, 2.2, 2.3,
3.0, 3.1, 3.2, 3.3};
BioAssemblyInfo bioAssemblyInfo = new BioAssemblyInfo();
List<BiologicalAssemblyTransformation> transforms = new ArrayList<>();
BiologicalAssemblyTransformation biologicalAssemblyTransformation = new BiologicalAssemblyTransformation();
biologicalAssemblyTransformation.setChainId("C");
biologicalAssemblyTransformation.setTransformationMatrix(new Matrix4d(testData));
transforms.add(biologicalAssemblyTransformation);
bioAssemblyInfo.setTransforms(transforms);
// Map the chain to the second index
Map<String, Integer> chainIdToIndexMap = new HashMap<>();
chainIdToIndexMap.put("C", 2);
// Now do the conversion and test they are the same
Map<double[], int[]> transMap = MmtfUtils.getTransformMap(bioAssemblyInfo, chainIdToIndexMap);
assertArrayEquals(testData, (double[]) transMap.keySet().toArray()[0], 0.0);
assertArrayEquals(new int[] {2} , (int[]) transMap.values().toArray()[0]);
}
项目:biojava
文件:TestMmtfUtils.java
/**
* Test the conversion of a matrix to an array of doubles.
*/
@Test
public void testConvertToDoubleArray() {
Matrix4d matrix4d = new Matrix4d();
matrix4d.m00 = 0.0;
matrix4d.m01 = 0.1;
matrix4d.m02 = 0.2;
matrix4d.m03 = 0.3;
matrix4d.m10 = 1.0;
matrix4d.m11 = 1.1;
matrix4d.m12 = 1.2;
matrix4d.m13 = 1.3;
matrix4d.m20 = 2.0;
matrix4d.m21 = 2.1;
matrix4d.m22 = 2.2;
matrix4d.m23 = 2.3;
matrix4d.m30 = 3.0;
matrix4d.m31 = 3.1;
matrix4d.m32 = 3.2;
matrix4d.m33 = 3.3;
double[] testData = new double[] {0.0, 0.1, 0.2, 0.3,
1.0, 1.1, 1.2, 1.3,
2.0, 2.1, 2.2, 2.3,
3.0, 3.1, 3.2, 3.3};
assertArrayEquals(testData,MmtfUtils.convertToDoubleArray(matrix4d), 0.0);
}
项目:biojava
文件:MmtfUtils.java
/**
* Convert a bioassembly information into a map of transform, chainindices it relates to.
* @param bioassemblyInfo the bioassembly info object for this structure
* @param chainIdToIndexMap the map of chain ids to the index that chain corresponds to.
* @return the bioassembly information (as primitive types).
*/
public static Map<double[], int[]> getTransformMap(BioAssemblyInfo bioassemblyInfo, Map<String, Integer> chainIdToIndexMap) {
Map<Matrix4d, List<Integer>> matMap = new HashMap<>();
List<BiologicalAssemblyTransformation> transforms = bioassemblyInfo.getTransforms();
for (BiologicalAssemblyTransformation transformation : transforms) {
Matrix4d transMatrix = transformation.getTransformationMatrix();
String transChainId = transformation.getChainId();
if (!chainIdToIndexMap.containsKey(transChainId)){
continue;
}
int chainIndex = chainIdToIndexMap.get(transformation.getChainId());
if(matMap.containsKey(transMatrix)){
matMap.get(transMatrix).add(chainIndex);
}
else{
List<Integer> chainIdList = new ArrayList<>();
chainIdList.add(chainIndex);
matMap.put(transMatrix, chainIdList);
}
}
Map<double[], int[]> outMap = new HashMap<>();
for (Entry<Matrix4d, List<Integer>> entry : matMap.entrySet()) {
outMap.put(convertToDoubleArray(entry.getKey()), CodecUtils.convertToIntArray(entry.getValue()));
}
return outMap;
}
项目:Pogamut3
文件:AffineTransform3D.java
public static AffineTransform3D createRotationOx(double theta) {
Matrix3d matrix3d = new Matrix3d();
matrix3d.rotX(theta);
Matrix4d matrix4d = new Matrix4d();
matrix4d.set(matrix3d);
return new AffineTransform3D(matrix4d);
}
项目:Pogamut3
文件:AffineTransform3D.java
public static AffineTransform3D createRotationOy(double theta) {
Matrix3d matrix3d = new Matrix3d();
matrix3d.rotY(theta);
Matrix4d matrix4d = new Matrix4d();
matrix4d.set(matrix3d);
return new AffineTransform3D(matrix4d);
}
项目:Pogamut3
文件:AffineTransform3D.java
public static AffineTransform3D createRotationOz(double theta) {
Matrix3d matrix3d = new Matrix3d();
matrix3d.rotZ(theta);
Matrix4d matrix4d = new Matrix4d();
matrix4d.set(matrix3d);
return new AffineTransform3D(matrix4d);
}