⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arrow.java

📁 MASON代表多主体邻里或网络仿真(Multi-Agent Simulator of Neighborhoods or Networks)。它是乔治梅森大学用Java开发的离散事件多主体仿真核心库
💻 JAVA
字号:
package sim.portrayal3d.simple;import com.sun.j3d.utils.geometry.*;import java.awt.Font;import javax.media.j3d.*;import javax.vecmath.*;/** *  * @author Gabriel Balan *  * This file was initially taken from * http://www.j3d.org/downloads/Arrow.java *  * and heavily modified */public class Arrow     {    public static final Color3f defaultArrowColor = new Color3f(0.5f,0.5f,0.5f);    public static final Font3D  f3d = new Font3D(new Font(null, Font.PLAIN, 1), null);    /**     * Creates a 3D arrow between points <code>stPt</code>      * and <code>endPt</code>     * if either label is not null, it adds a Text2D     * obect at the appropriate end.      **/    public static TransformGroup createArrow(   float ArrowDia,                                                 Vector3f stPt,                                                 Vector3f endPt,                                                 String stLabel,                                                 String endLabel)        {                        Vector3d v = new Vector3d(stPt);        v.negate();        v.add(new Vector3d(endPt));        // v= start -> end                        float ArrowLen = (float) v.length();        float ArrowHeadLen = 5.0f*ArrowDia;        float ArrowHeadDia = 2.0f*ArrowDia;        float CylenderLen = ArrowLen - ArrowHeadLen;                //Rotation Matrix for whole arrow (cylinder + two cones)                //Apperance for the arrow        Appearance caAppearance = new Appearance();        ColoringAttributes caColor;        caColor = new ColoringAttributes();        caColor.setColor(defaultArrowColor);        caAppearance.setColoringAttributes(caColor);                        Transform3D caTransform = new Transform3D();        caTransform.setTranslation(stPt);                        Vector3d oy = new Vector3d(0,1,0);                        Vector3d axis = new Vector3d();        axis.cross(oy, v);                        double sin =  axis.length()/ArrowLen;        if(sin>1)            sin =1;        caTransform.setRotation(new AxisAngle4d(axis, Math.asin(axis.length()/v.length())));        //axis.length() must be v.length() both doubles or floats, otherwise        // you might get something bigger than 1.        caTransform.setTranslation(stPt);                                                                                       TransformGroup caTransformGroup = new TransformGroup(caTransform);                                        Node cArrowCylinder = new Cylinder(ArrowDia, CylenderLen, caAppearance);        Transform3D arrowCylinderTransform = new Transform3D();        arrowCylinderTransform.set(new Vector3f(0,CylenderLen/2,0));        TransformGroup arrowCylinderTransformGroup = new TransformGroup(arrowCylinderTransform);        arrowCylinderTransformGroup.addChild(cArrowCylinder);        caTransformGroup.addChild(arrowCylinderTransformGroup);                                        Transform3D arrowHeadTransform = new Transform3D();        arrowHeadTransform.set(new Vector3f(0,CylenderLen,0));        TransformGroup arrowHeadTransformGroup = new TransformGroup(arrowHeadTransform);        Node ArrowHeadCone = new Cone(ArrowHeadDia, ArrowHeadLen, 1, caAppearance);        arrowHeadTransformGroup.addChild(ArrowHeadCone);        caTransformGroup.addChild(arrowHeadTransformGroup);        if(stLabel != null)            {            Text3D txt = new Text3D(f3d, stLabel);            OrientedShape3D os3d = new OrientedShape3D(txt, caAppearance, OrientedShape3D.ROTATE_ABOUT_POINT, new Point3f(0,0,0));                                    Transform3D t = new Transform3D();            t.setScale(5*ArrowDia);            t.setTranslation(new Vector3f(0, -.1f, 0));            TransformGroup stLabelTG = new TransformGroup(t);                                    stLabelTG.addChild(os3d);            caTransformGroup.addChild(stLabelTG);            }        if(endLabel != null)            {            Text3D txt = new Text3D(f3d, endLabel);            OrientedShape3D os3d = new OrientedShape3D(txt, caAppearance, OrientedShape3D.ROTATE_ABOUT_POINT, new Point3f(0,ArrowLen,0));                                    Transform3D t = new Transform3D();            t.setScale(5*ArrowDia);            t.setTranslation(new Vector3f(0, ArrowLen + .1f, 0));            TransformGroup endLabelTG = new TransformGroup(t);                            endLabelTG.addChild(os3d);            caTransformGroup.addChild(endLabelTG);            }        return caTransformGroup;        }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -