Java 类javax.vecmath.Tuple3d 实例源码

项目:campskeleton    文件:Edge.java   
/**
 *
 * This is a robust collision of a's adjacent edges with a horizontal plane at the given height
 * When Two parallel edges are given, we can assume that the
 */
public static Tuple3d collide (Corner a, double height)
{
    LinearForm3D ceiling = new LinearForm3D( 0, 0, 1, -height );

    // this can cause Jama not to return...
    if ( a.prevL.linearForm.hasNaN() || a.nextL.linearForm.hasNaN() )
                throw new Error();

        try {
            return ceiling.collide(a.prevL.linearForm, a.nextL.linearForm);
        } catch (RuntimeException e) {
            assert (a.prevL.sameDirectedLine(a.nextL));

            // a vector in the direction of uphill from a
            Vector3d dir = new Vector3d ( a.prevL.uphill );
            dir.normalize();
            // via similar triangle (pyramids)
            dir.scale(height - a.z);
            dir.add(a);

            //assume, they're all coincident?
            return new Point3d (dir.x, dir.y, height);
        }
}
项目:kendzi-math    文件:PointUtil.java   
/**
 * @see http://pl.wikipedia.org/wiki/Elementarne_macierze_transformacji
 * @param pTuple3d
 * @param pAngle
 * @return
 */
public static Vector3d rotateX3d(Tuple3d pTuple, double pAngle) {

    double x = pTuple.x;
    double y = pTuple.y;
    double z = pTuple.z;

    double cosA = Math.cos(pAngle);
    double sinA = Math.sin(pAngle);

    return new Vector3d(
            x,
            y * cosA - z * sinA,
            y * sinA + z * cosA);

}
项目:kendzi-math    文件:PointUtil.java   
/**
 * @see http://pl.wikipedia.org/wiki/Elementarne_macierze_transformacji
 * @param pTuple3d
 * @param pAngle
 * @return
 */
public static Vector3d rotateY3d(Tuple3d pTuple3d, double pAngle) {

    double x = pTuple3d.x;
    double y = pTuple3d.y;
    double z = pTuple3d.z;

    double cosB = Math.cos(pAngle);
    double sinB = Math.sin(pAngle);

    return new Vector3d(
          x * cosB + z * sinB,
          y,
          -x * sinB + z * cosB);

}
项目:NK-VirtualGlobe    文件:Ellipsoid.java   
public Matrix4f  computeSurfaceTransform(
        double lat, double lon, double hEllps,
        double az, double ha, Matrix4f mat, Tuple3d origin) {
    if (mat == null) {
        mat = new Matrix4f();
    } else {
        mat.m01 = mat.m10 = mat.m02 =
                mat.m20 = mat.m12 = mat.m21 =
                mat.m30 = mat.m31 = mat.m32 = 0;
    }
    mat.m00 = mat.m11 = mat.m22 = mat.m33 = 1;
    synchronized (eye) {
        toCartesian(lat, lon, hEllps, eye);
        mat.m03 = (float)(eye.x - origin.x);
        mat.m13 = (float)(eye.y - origin.y);
        mat.m23 = (float)(eye.z - origin.z);
    }
    synchronized (workTrans) {
        workTrans.rotZ((float)(Math.PI/2.+lon)); mat.mul(workTrans);
        workTrans.rotX((float)(Math.PI/2.-lat)); mat.mul(workTrans);
        workTrans.rotZ((float)(-az));            mat.mul(workTrans);
        workTrans.rotX((float)(Math.PI/2.+ha));  mat.mul(workTrans);
    }
    return mat;
}
项目:Pogamut3    文件:TargetApproachingSteer.java   
/** When called, the bot starts steering, when possible, he get's nearer the target location. */
@Override
public Vector3d run(Vector3d scaledActualVelocity, RefBoolean wantsToGoFaster, RefBoolean wantsToStop, RefLocation focus)
{
    // Supposed velocity in the next tick of logic, after applying various steering forces to the bot.
    Vector3d nextVelocity = new Vector3d(0,0,0);

    for(Target_packet tp : targets) {

        /** ISteering properties: target location - bot approaches this location. */
        Location targetLocation = tp.getTargetLocation();

        // A vector from the bot to the target location.
        Vector3d vectorToTarget = new Vector3d(targetLocation.x - botself.getLocation().x, targetLocation.y - botself.getLocation().y, 0);

        double distFromTarget = vectorToTarget.length();

        /** ISteering properties: target gravity - a parameter meaning how attracted the bot is to his target location. */
        int attractiveForce = tp.getAttractiveForce(distFromTarget);

        if (distFromTarget < NEARLY_THERE_DISTANCE) {
            wantsToStop.setValue(true);
            //if (SteeringManager.DEBUG) System.out.println("We reached the target");
        } else {
            vectorToTarget.normalize();
            vectorToTarget.scale(attractiveForce);
            nextVelocity.add((Tuple3d) vectorToTarget);
        }
    }
    wantsToGoFaster.setValue(true);
    return nextVelocity;
}
项目:Analyst    文件:FacialPoint.java   
public FacialPoint(FacialPointType type, Tuple3d coords) {        
    this.pos = new Vector3f(coords);

    this.type = type;
    this.name = FpTexter.getInstance().getFPname(type);
    this.info = FpTexter.getInstance().getFPinfo(type);
}
项目:campskeleton    文件:CoSitedCollision.java   
public int compare( Chain o1, Chain o2 )
        {
            Corner c1 = o1.chain.get( 0 );
            Corner c2 = o2.chain.get( 0 );

            // except for the first and and last point
            // chain's non-start/end points are always at the position of the collision - so to
            // find the angle of the first edge at the specified height, we project it's start
            // coordinate the desired height and take the angle relative to the collision
            // !could speed up with a chain-class that caches this info!

//            try
//            {
                Tuple3d p1 = Edge.collide(c1, height);//ceiling.collide( c1.prevL.linearForm, c1.nextL.linearForm );
                Tuple3d p2 = Edge.collide(c2, height );//ceiling.collide( c2.prevL.linearForm, c2.nextL.linearForm );

                p1.sub( loc );
                p2.sub( loc );

                // start/end line is (+-)Pi
                return Double.compare(
                        Math.atan2( p1.y, p1.x ),
                        Math.atan2( p2.y, p2.x ) );
//            }
//            catch (RuntimeException e)
//            {
//                // we can probably fix these up (by assuming that they're horizontal?)
//                // todo: can we prove they are safe to ignore? eg: no parallel edges inbound, none outbound etc..
//                 System.err.println( "didn't like colliding 1" + c1.prevL + " and " + c1.nextL );
//                 System.err.println( "                      2" + c2.prevL + " and " + c2.nextL );
//                 return 0;
//            }
        }
项目:campskeleton    文件:Output.java   
public void addOutputSideTo( boolean isTop, Tuple3d a, Tuple3d b, Edge... edges ) // a.y == b.yequals(b)
    {
        for ( Edge edge : edges )
        {
            Corner c = edge.start; // assumption: start of edge will always be a leading corner on the face!
            Face f = faces.get( c );
            assert (f != null);
            if (isTop)
                f.topSE.add( createEdge( a, b ) );
            // just check those tuple's aren't corners....
            f.results.add( new Point3d( a ), new Point3d( b ) );
//            System.out.println(">>");
        }
    }
项目:campskeleton    文件:Output.java   
private SharedEdge createEdge ( Tuple3d start, Tuple3d end)
{
    SharedEdge newEdge = new SharedEdge (new Point3d (start), new Point3d (end ));
    newEdge = edges.get( newEdge ); // identity lookup - only one edge!

    return newEdge;
}
项目:siteplan    文件:MeshBuilder.java   
public void addCube (Tuple3d corner, Tuple3d up, Tuple3d along, double upL, double alongL, double inL ) {
    Vector3d in = new Vector3d();
    in.cross( new Vector3d(up), new Vector3d(along) );
    addCube (
            Jme3z.to( corner ), Jme3z.to( up ).normalizeLocal(), 
            Jme3z.to( along ).normalizeLocal(), Jme3z.to( in ).normalizeLocal(), 
            (float) upL, (float) alongL, (float) inL );
}
项目:vzome-core    文件:POVRayExporter.java   
private String printTuple3d( Tuple3d t )
{
    StringBuilder buf = new StringBuilder( "<" );
    buf .append( FORMAT.format(t.x) );
    buf .append( "," );
    buf .append( FORMAT.format(t.y) );
    buf .append( "," );
    buf .append( FORMAT.format(t.z) );
    buf .append( ">" );
    return buf .toString();
}
项目:breakout    文件:VecmathUtils.java   
public static void checkReal(Tuple3d p) {
    if (Double.isNaN(p.x) || Double.isNaN(p.y) || Double.isNaN(p.z)) {
        throw new IllegalArgumentException("tuple has NaN values: " + p);
    }
    if (Double.isInfinite(p.x) || Double.isInfinite(p.y) || Double.isInfinite(p.z)) {
        throw new IllegalArgumentException("tuple has Infinite values: " + p);
    }
}
项目:breakout    文件:Camera3D.java   
/**
 * Sets the camera location to <code>newLocation</code> without affecting the rotation.
 */
public void setLocation( Tuple3d newLocation , boolean applyNow )
{
    m_pendingPosition.setLocation( newLocation );
    if( applyNow )
    {
        exportVPT( );
    }
}
项目:breakout    文件:CameraPosition.java   
static void checkValid( Tuple3d t )
{
    if( Double.isNaN( t.x ) || Double.isNaN( t.y ) || Double.isNaN( t.z ) )
    {
        throw new IllegalArgumentException( "tuple has NaN values" );
    }
    if( Double.isInfinite( t.x ) || Double.isInfinite( t.y ) || Double.isInfinite( t.z ) )
    {
        throw new IllegalArgumentException( "tuple has Infinite values" );
    }
}
项目:breakout    文件:CameraPosition.java   
/**
 * Sets the camera location to <code>newLocation</code> without affecting the rotation.
 */
public void setLocation( Tuple3d newLocation )
{
    checkValid( newLocation );
    location.set( newLocation );
    xform.setTranslation( location );
    invXformUpToDate = false;
    locationUpToDate = true;
}
项目:biojava    文件:JmolSymmetryScriptGenerator.java   
protected static String getJmolPoint(Tuple3d point) {
    StringBuilder s = new StringBuilder();
    s.append("{");
    s.append(fDot2(point.x));
    s.append(",");
    s.append(fDot2(point.y));
    s.append(",");
    s.append(fDot2(point.z));
    s.append("}");
    return s.toString();
}
项目:NK-VirtualGlobe    文件:Ellipsoid.java   
public final void toCartesian(double lat, double lon, double h, Tuple3d p) {
    double n = getN(lat);
    double r = (n+h) * Math.cos(lat);

    p.x = r * Math.cos(lon);
    p.y = r * Math.sin(lon);
    p.z = (n * (1.-getE2()) + h) * Math.sin(lat);
}
项目:Pogamut3    文件:SteeringManager.java   
/**
 * The main method. This method must be called in each tick (logic), if we want the navigation layer to compute the next velocity and send it to the locomotion layer.
 * Note: Should not be called anymore. Use start() and stop() methods.
 */
public void run() {
    steeringForces.clear();

    Vector3d velocity = botself.getVelocity().getVector3d();

    if (SteeringManager.DEBUG) System.out.println("Velocity "+velocity+" length "+velocity.length());

    // Supposed velocity in the next tick of logic, after applying various steering forces to the bot.
    Vector3d nextVelocity = new Vector3d(velocity.x, velocity.y, velocity.z);

    double actualWeight;

    if (useLastVeloWeight) {
        actualWeight = lastVeloWeight;
    } else {
        actualWeight = 3 - velocity.length()/WALK_VELOCITY_LENGTH;  //This causes that <= WALK_VEOCITY_LENGTH will have actualWeight 2, sth. >= 2*WALK_VELOCITY_LENGTH 1, and other values wil be between 1 and 2.
        if (actualWeight <1)
            actualWeight = 1;
        else if (actualWeight > 2)
            actualWeight = 2;
        if (velocity.length() == 0)
            actualWeight = 0;
    }

    //The actual velocity has bigger weigh ==> the behavior will be smoother.   //5389.0,-6203.0,-3446.65
    nextVelocity.scale(actualWeight);

    myActualVelocity = new Vector3d(nextVelocity.x, nextVelocity.y, nextVelocity.z);
    Vector3d myStopVelocity = new Vector3d(nextVelocity.x, nextVelocity.y, nextVelocity.z);

    double totalWeight = actualWeight;

    boolean everyoneWantsToGoFaster = canEnlargeVelocity;
    RefBoolean wantsToGoFaster = new RefBoolean(false);
    RefBoolean wantsToStop = new RefBoolean(false);
    Location focusLoc = new Location(0,0,0);

    for(SteeringType stType : mySteerings.keySet()) {
        ISteering steering = mySteerings.get(stType);
        RefLocation newFocus = new RefLocation(); 
        newFocus.data = new Location(0, 0, 0);
        Vector3d newVelocity = setVelocitySpecific(steering, wantsToGoFaster, wantsToStop, newFocus);
        focusLoc = setFocusSpecific(stType,wantsToStop.getValue(),newFocus.data,focusLoc);
        if (wantsToStop.getValue()) {   //Wants to stop causes, tak bot stops, if this steering is the only one. Otherwise the other steerings can cause that bot will again move.
            newVelocity.x = -myStopVelocity.x;
            newVelocity.y = -myStopVelocity.y;
            newVelocity.z = -myStopVelocity.z;
            myStopVelocity.sub(newVelocity);
            everyoneWantsToGoFaster = false;
            if (SteeringManager.DEBUG) System.out.println("We stop.");
            wantsToStop.setValue(false);
        } else {
            if (newVelocity.length() > MAX_FORCE) newVelocity.scale(MAX_FORCE/newVelocity.length());
            newVelocity.scale(steeringWeights.get(stType)); //Each steering has its own weight.
            everyoneWantsToGoFaster = everyoneWantsToGoFaster && wantsToGoFaster.getValue();
        }
        if (newVelocity.length()>0) {
            //TODO: WARNING hack to use different type of steering return values
            //it should be redone, more cleaner and robust way... Petr B.
            newVelocity.add((Tuple3d)nextVelocity);
            nextVelocity = newVelocity;
            if (newVelocity.length() > MIN_VALUE_TO_SUM)    //Only significant steerings are counted into totalWeight.
                totalWeight += steeringWeights.get(stType);
        }
        if (SteeringManager.DEBUG) System.out.println(steering.toString()+"| length "+newVelocity.length()+" | weight: "+steeringWeights.get(stType));
        steeringForces.put(stType, newVelocity);
    }
    if (SteeringManager.DEBUG) System.out.print("Sum "+nextVelocity.length()+" TotalWeight: "+totalWeight);
    if (totalWeight > 0) {
        nextVelocity.scale(1/totalWeight);
    }
    if (SteeringManager.DEBUG) System.out.println(" Result "+nextVelocity.length());

    moveTheBot(nextVelocity, everyoneWantsToGoFaster, focusLoc);
}
项目:Pogamut3    文件:TriangleSteer.java   
@Override
public Vector3d run(Vector3d scaledActualVelocity, RefBoolean wantsToGoFaster, RefBoolean wantsToStop, RefLocation focus) {
    // <editor-fold defaultstate="collapsed" desc="debug">
    if (properties == null) {
        if (SOC_STEER_LOG.DEBUG) {
            SOC_STEER_LOG.AddLogLineWithDate("no properties", "triangleError");

        }
    }// </editor-fold>

    Location newFocus = getFocus();
    if (newFocus != null) {
        focus.data = newFocus;
    }


    //returns ideal place where steered agent wants to stay...
    Location targetLocation = WhereToGo(botself, properties);

    // Supposed velocity in the next tick of logic, after applying various steering forces to the bot.
    SteeringResult nextVelocity = new SteeringResult(new Vector3d(0, 0, 0), 1);

    //we are able to compute ideal place...
    if (targetLocation != null) {


        // A vector from the bot to the target location.
        targetLocation = new Location(targetLocation.x,targetLocation.y, botself.getLocation().z);
        Vector3d vectorToTarget = targetLocation.sub(botself.getLocation()).asVector3d();

        double distFromTarget = vectorToTarget.length();
        nextVelocity.setMult(distFromTarget / 100);
        if (distFromTarget < KMinimalDistance) {
            wantsToStop.setValue(true);
            return new SteeringResult(new Vector3d(0, 0, 0), 1);
        }

        double attractiveForce = KDefaultAttraction;//* (distFromTarget / KDefaultAttractionDistance);

        vectorToTarget.normalize();
        vectorToTarget.scale(attractiveForce);
        nextVelocity.add((Tuple3d) vectorToTarget);
    }else
    {
        nextVelocity.setMult(1);
    }

    //no need to scale, scaling is done within method attraction(...)
    int botAttractiveForce = KDefaultAttraction / 6;

    Vector3d attractionFromFst = attraction(botself, properties.getFstBot(), 1.3);
    Vector3d attractionFromSnd = attraction(botself, properties.getSndBot(), 1.3);

    attractionFromFst.scale(botAttractiveForce);
    nextVelocity.add((Tuple3d) attractionFromFst);

    attractionFromSnd.scale(botAttractiveForce);
    nextVelocity.add((Tuple3d) attractionFromSnd);



    wantsToGoFaster.setValue(false);
    return nextVelocity;
}
项目:Pogamut3    文件:Box3D.java   
public Box3D(Tuple3d p1, Tuple3d p2) {
    this(p1.getX(), p2.getX(), p1.getY(), p2.getY(), p1.getZ(), p2.getZ());
}
项目:Pogamut3    文件:PointSet3D.java   
/**
 * Instances of Point3D are directly added, other Point are converted to
 * Point3D with the same location.
 */
public PointSet3D(Tuple3d[] points) {
    for (Tuple3d element : points)
        this.points.add(new Point3D(element));
}
项目:Pogamut3    文件:Point3D.java   
public Point3D(Tuple3d point) {
    this(point.getX(), point.getY(), point.getZ());
}
项目:chordatlas    文件:DebugGen.java   
public DebugGen( List<Tuple3d> todebug2, Tweed tweed ) {
    super( "foo", tweed );
    this.cubes = todebug2;
}
项目:chordatlas    文件:Pointz.java   
public static Point2d to2( Tuple3d loc ) {
    return new Point2d(loc.x, loc.z);
}
项目:chordatlas    文件:MiniTransform.java   
public static void convertToMini( Iterable<File> bigObj, File outfile, Matrix4d transform ) {

        outfile.mkdirs();

        ObjDump src = new ObjDump( bigObj );//.iterator().next() );

        src.centerVerts();
        src.transform (transform);

        long count = src.material2Face.entrySet().stream().mapToInt( x -> x.getValue().size() ).sum();
        double[] bounds = src.orderVert.stream().collect( new InaxPoint3dCollector() );
        long targetCount = 5000;

        double volume = ( bounds[ 1 ] - bounds[ 0 ] ) * ( bounds[ 3 ] - bounds[ 2 ] ) * ( bounds[ 5 ] - bounds[ 4 ] );

        double edgeLength = Math.pow( volume / ( count / targetCount ), 0.3333 );

        int 
                xc = (int) Math.ceil( ( bounds[ 1 ] - bounds[ 0 ] ) / edgeLength ), 
                yc = (int) Math.ceil( ( bounds[ 3 ] - bounds[ 2 ] ) / edgeLength ), 
                zc = (int) Math.ceil( ( bounds[ 5 ] - bounds[ 4 ] ) / edgeLength );

        Set<Face>[][][] faces = new Set[xc][yc][zc];

        for ( Entry<Material, List<Face>> e : src.material2Face.entrySet() )
            for ( Face f : e.getValue() ) {

                Tuple3d vt = src.orderVert.get( f.vtIndexes.get( 0 ) );

                int ix = (int) ( ( vt.x - bounds[ 0 ] ) / edgeLength );
                int iy = (int) ( ( vt.y - bounds[ 2 ] ) / edgeLength );
                int iz = (int) ( ( vt.z - bounds[ 4 ] ) / edgeLength );

                if ( faces[ ix ][ iy ][ iz ] == null )
                    faces[ ix ][ iy ][ iz ] = new HashSet();

                faces[ ix ][ iy ][ iz ].add( f );
            }

        int dir = 0;
        MiniTransform mt = new MiniTransform();

        for ( int x = 0; x < xc; x++ )
            for ( int y = 0; y < yc; y++ )
                for ( int z = 0; z < zc; z++ ) {

                    Set<Face> miniF = faces[ x ][ y ][ z ];
                    if ( miniF == null )
                        continue;

                    Matrix4d trans = new Matrix4d();
                    trans.setIdentity();
                    trans.setScale( edgeLength / 255 );
                    trans.setTranslation( new Vector3d(
                            x * edgeLength + bounds[0],
                            y * edgeLength + bounds[2],
                            z * edgeLength + bounds[4]
                            ) );

                    Matrix4d pack = new Matrix4d( trans );
                    pack.invert();

                    ObjDump mini = new ObjDump();
                    miniF.stream().forEach( f -> mini.addFaceFrom( f, src ) );
                    mini.transform( pack );

                    mini.dump( new File( new File( outfile, "" + dir ), OBJ ) );
                    mt.index.put( dir, trans );

                    dir++;
                }

        try {
            new XStream().toXML( mt, new FileWriter( new File( outfile, INDEX ) ) );
        } catch ( IOException e1 ) {
            e1.printStackTrace();
        }

        System.out.println( "wrote " + count + " faces to " + dir + " meshes" );

    }
项目:Analyst    文件:Triangle.java   
public Triangle(Tuple3d a, Tuple3d b, Tuple3d c) {
    this.a = new Point3f(a);
    this.b = new Point3f(b);
    this.c = new Point3f(c);
}
项目:Analyst    文件:Triangle.java   
public void setA(Tuple3d a) {
    this.a = new Point3f(a);
}
项目:Analyst    文件:Triangle.java   
public void setB(Tuple3d b) {
    this.b = new Point3f(b);
}
项目:Analyst    文件:Triangle.java   
public void setC(Tuple3d c) {
    this.c = new Point3f(c);
}
项目:BimSPARQL    文件:GeometryUtils.java   
public static Vector3d vectorSubtract(Tuple3d t0, Tuple3d t1){
    return new Vector3d(t0.x - t1.x, t0.y- t1.y, t0.z - t1.z);
}
项目:BimSPARQL    文件:GeometryUtils.java   
public static Point3d pointAdd(Tuple3d t0, Tuple3d t1){
    return new Point3d(t0.x + t1.x, t0.y+ t1.y, t0.z + t1.z);
}
项目:campskeleton    文件:Output.java   
public void addOutputSideTo( Tuple3d a, Tuple3d b, Edge... edges )
{
    addOutputSideTo( false, a, b, edges );
}
项目:campskeleton    文件:Corner.java   
public Corner( Tuple3d in ) {
    super( in );
}
项目:campskeleton    文件:CollisionQ.java   
private void cornerEdgeCollision( Corner corner, Edge edge )
    {
            // check for the uphill vector of both edges being too similar (parallel edges)
            // also rejects e == corner.nextL or corner.prevL
            // updated to take into account vertical edges - will always have same uphill! - (so we check edge direction too)
            if (
                    (edge.uphill.angle( corner.prevL.uphill ) < 0.0001 && edge.direction().angle(  corner.prevL.uphill) < 0.0001 ) ||
                    (edge.uphill.angle( corner.nextL.uphill ) < 0.0001 && edge.direction().angle(  corner.nextL.uphill) < 0.0001 ))
                return;


            Tuple3d res = null;
            try
            {
                // sometimes locks up here if edge.linear form has NaN components.
                if ( corner.prevL.linearForm.hasNaN() || corner.nextL.linearForm.hasNaN() || edge.linearForm.hasNaN())
                    throw new Error();
                res =edge.linearForm.collide( corner.prevL.linearForm, corner.nextL.linearForm );
            }
            catch ( Throwable f )
            {
                //trying to collide parallel-ish faces, don't bother
//                System.err.println( "didn't like colliding " + edge + " and " + corner.prevL + " and " + corner.nextL );
                return;
            }

            if ( res != null )
            {
                // cheap reject: if collision is equal or below (not the correct place to check) the corner, don't bother with it
                if ( res.z < corner.z || res.z < edge.start.z )
                    return;

                EdgeCollision ec =
                        new EdgeCollision( new Point3d(res),
                        corner.prevL,
                        corner.nextL,
                        edge);


                if (! skel.seen.contains( ec ))
                    faceEvents.offer( ec );
            }
    }
项目:siteplan    文件:Jme3z.java   
public static com.jme3.math.Vector3f toJmeVec( Tuple3d a ) {
    return new com.jme3.math.Vector3f( (float) a.x, (float) a.y, (float) a.z );
}
项目:siteplan    文件:Jme3z.java   
public static Vector3f to( Tuple3d l ) {
    return new Vector3f( (float) l.x, (float) l.y, (float) l.z );
}
项目:siteplan    文件:Jme.java   
public static Point3d convert (Tuple3d in)
{
    Point3d out = new Point3d(in);
    transform.transform( out );
    return out;
}
项目:siteplan    文件:Jme.java   
public static Vector3f toF (Tuple3d in)
{
    return new Vector3f ((float)in.x,(float)in.y,(float)in.z);
}
项目:kendzi-math    文件:Ray3dUtil.java   
public final static Vector3d sub(Tuple3d v, Tuple3d v1) {
    return new Vector3d(v.x - v1.x, v.y - v1.y, v.z - v1.z);
}
项目:kendzi-math    文件:Line3dDistanceUtil.java   
static double dot(Tuple3d v0, Tuple3d v1) {
    return (v0.x*v1.x + v0.y*v1.y + v0.z*v1.z);
}