「java球旋转」球的旋转是如何产生的

博主:adminadmin 2022-11-24 23:05:08 57

今天给各位分享java球旋转的知识,其中也会对球的旋转是如何产生的进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java 怎么让一个图形绕一个点旋转360度

import java.awt.Canvas;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.RenderingHints;

import java.awt.image.BufferedImage;

 

/**

 * @author ZhengYesheng

 */

public class RotateImageCanvas extends Canvas implements Runnable

{

    private static final long serialVersionUID = -1997487731464495923L;

 

    BufferedImage img;

    BufferedImage rotatedImg;

 

    int degress = 0;

 

    public RotateImageCanvas(BufferedImage img)

    {

        super();

        this.img = img;

        new Thread(this).start();

    }

 

    @Override

    public void run()

    {

        while (true)

        {

            //A,与B的代码配合决定旋转的速度

            degress += 1;

            degress %= 360;

            repaint();

            try

            {

                if (degress == 0)

                {

                    //绕一周后等待的时间在这里设置

                    Thread.sleep(3 * 1000);

                }

                else

                {

                    //考虑到视觉平滑,这里不应大约40。

                    Thread.sleep(30);

                }

            }

            catch (InterruptedException e)

            {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }

 

    @Override

    public void paint(Graphics graphics)

    {

        super.paint(graphics);

        //获取旋转指定角度后的图片。为了避免累计误差,这里是用原始图像旋转的

        rotatedImg = rotateImage(img, degress);

        //绘制旋转后的图片

        graphics.drawImage(rotatedImg, 0, 0, this);

    }

 

    /**

     * 旋转图片为指定角度。

     * 注意:1、这个方法实现了图像的基于中点的旋转,要想绕指定点,需要配合Matrix类

     *          2、为避免图像被裁切,结果图片的尺寸也需要动态计算

     *          3、现在旋转后有黑色背景,如果不需要这个效果,需要设置结果图片的Alpha模式

     * 

     * @param bufferedimage

     *            目标图像

     * @param degree

     *            旋转角度

     * @return

     */

    private BufferedImage rotateImage(BufferedImage bufferedimage, int degree)

    {

        int w = bufferedimage.getWidth();

        int h = bufferedimage.getHeight();

        int type = bufferedimage.getColorModel().getTransparency();

        BufferedImage img;

        Graphics2D graphics2d;

        (graphics2d = (img = new BufferedImage(w, h, type)).createGraphics())

                .setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

        graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);

        graphics2d.drawImage(bufferedimage, 0, 0, null);

        graphics2d.dispose();

        return img;

    }

}

请问各位高手:java语言,如何实现按下一键后,界面上一个小球按指定方向移动。

按下一个键会得到一个事件源,对这个事件源判断如果是你按下的,就对小球进行移动,

java利用多线程编程实现一个正在旋转的地球

import java.awt.*;

import java.io.File;code_br_import java.io.IOException;code_br_import java.applet.*;

import javax.imageio.ImageIO;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class TestRunnable extends Applet implements Runnable{

Thread Thread;

public Image image = null;

public int t = 0;

public void start(){

Thread = new Thread(this);

Thread.start();

}

public void run(){

while(true){

this.setSize(1000, 600);

repaint();

try{

Thread.sleep(100);

}catch(InterruptedException e){

e.printStackTrace();

}

}

}

public void paint(Graphics g){

try {

image = ImageIO.read(new File("E:/zp/" + t + ".png"));

t = (t + 1) % 110 ;

g.drawImage(image, 0, 0, getWidth(), getHeight(), null);

} catch (IOException e) {

e.printStackTrace();

}

}

}

java3d中 在空间中有两个球形(Sphere),如何添加一个圆柱形(Cylinder)把这两个球连起来 ?

给你个思路,

先计算两个球连线的向量,然后创建一个圆柱,按着向量执行矩阵变换,

java3D的问题…我要利用java3d绘制一个地球可以自转的动画…

import java.applet.Applet;

import java.awt.*;

import com.sun.j3d.utils.applet.MainFrame;

import com.sun.j3d.utils.universe.*;

import javax.media.j3d.*;

import javax.vecmath.*;

import static java.lang.Math.*;

import com.sun.j3d.utils.behaviors.mouse.*;

public class Ball11 extends Applet

{

private float vert[]=new float[30000];

private Color3f color[]=new Color3f[30000];

public BranchGroup createSceneGraph(){

BranchGroup objRoot=new BranchGroup();//分支组

BoundingSphere bounds=new BoundingSphere(new Point3d(),100.0);

Color3f bgColor=new Color3f(1.0f,1.0f,1.0f);

Background bg=new Background(bgColor);//背景颜色

bg.setApplicationBounds(bounds);//背景范围

objRoot.addChild(bg);

//添加平行光

DirectionalLight lightD1=new DirectionalLight();

lightD1.setInfluencingBounds(new BoundingSphere());

Vector3f direction=new Vector3f(2.5f,8.0f,-1.0f);

Color3f color1=new Color3f(1.0f,0.0f,0.0f);

direction.normalize();

lightD1.setDirection(direction);

lightD1.setColor(color1);

objRoot.addChild(lightD1);

//初始化

pointinit();

//添加运输组

TransformGroup trans=new TransformGroup();

trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

trans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);

objRoot.addChild(trans);

Shape3D shape=new Shape3D();

QuadArray qArray=new QuadArray(30000,QuadArray.COORDINATES|QuadArray.COLOR_3);

qArray.setCoordinates(0,vert);

qArray.setColors(0,color);

PolygonAttributes pa=new PolygonAttributes();

pa.setCullFace(PolygonAttributes.CULL_NONE);

shape.setGeometry(qArray);

Appearance app=new Appearance();

app.setPolygonAttributes(pa);

shape.setAppearance(app);

trans.addChild(shape);

//添加鼠标事件

MouseRotate rotate=new MouseRotate();

rotate.setTransformGroup(trans);

objRoot.addChild(rotate);

rotate.setSchedulingBounds(bounds);

MouseZoom zoom=new MouseZoom();

zoom.setTransformGroup(trans);

objRoot.addChild(zoom);

zoom.setSchedulingBounds(bounds);

MouseTranslate translate=new MouseTranslate();

translate.setTransformGroup(trans);

objRoot.addChild(translate);

translate.setSchedulingBounds(bounds);

objRoot.compile();

return objRoot;

}

public void pointinit(){

int i=0;

for(double a=0;a=2*Math.PI;a+=0.09){

for(double b=0;b=Math.PI;b+=0.1){

vert[i]=(float)Math.sin(b)*(float)cos(a);i++;

vert[i]=(float)Math.sin(a)*(float)sin(b);i++;

vert[i]=(float)Math.cos(b);i++;

vert[i]=(float)Math.sin(b)*(float)cos(a+0.1);i++;

vert[i]=(float)Math.sin(a+0.1)*(float)sin(b);i++;

vert[i]=(float)Math.cos(b+0.1);i++;

vert[i]=(float)Math.sin(b+0.1)*(float)cos(a+0.1);i++;

vert[i]=(float)Math.sin(a+0.1)*(float)sin(b+0.1);i++;

vert[i]=(float)Math.cos(b+0.1);i++;

vert[i]=(float)Math.sin(b+0.1)*(float)cos(a);i++;

vert[i]=(float)Math.sin(a)*(float)sin(b+0.1);i++;

vert[i]=(float)Math.cos(b+0.1);i++;

}

}

for(i=0;i30000;i++){

color[i]=new Color3f(0.4f,0.0f,0.5f);

}

}

public Ball11(){

setLayout(new BorderLayout());

GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();

Canvas3D c=new Canvas3D(config);

add("Center",c);

BranchGroup scene=createSceneGraph();

SimpleUniverse u=new SimpleUniverse(c);

u.getViewingPlatform().setNominalViewingTransform();

u.addBranchGraph(scene);

}

public static void main(String[] args){

long time1=System.nanoTime();

new MainFrame(new Ball11(),400,400);

long time2=System.nanoTime();

System.out.println("用时为: "+(time2-time1)/1000000000.0 + " 秒");

}

}

在用JAVA编写打砖块小游戏,球的运动是一个线程,怎么让球改变方向

你说的很多东西都是你自己定义的方法与成员,其他人不知道是什么意思。

判定的方法可以用用坐标范围判定。球每次移动到一个新点立刻判定该点及周围坐标是否有砖块就行了,另外不要他继承Thread来表示一个线程,用类实现Runnable接口 然后用一个新的Thread来执行类的实例。

关于java球旋转和球的旋转是如何产生的的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-24,除非注明,否则均为首码项目网原创文章,转载请注明出处。