「java球旋转」球的旋转是如何产生的
今天给各位分享java球旋转的知识,其中也会对球的旋转是如何产生的进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java 怎么让一个图形绕一个点旋转360度
- 2、请问各位高手:java语言,如何实现按下一键后,界面上一个小球按指定方向移动。
- 3、java利用多线程编程实现一个正在旋转的地球
- 4、java3d中 在空间中有两个球形(Sphere),如何添加一个圆柱形(Cylinder)把这两个球连起来 ?
- 5、java3D的问题…我要利用java3d绘制一个地球可以自转的动画…
- 6、在用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球旋转和球的旋转是如何产生的的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-24,除非注明,否则均为
原创文章,转载请注明出处。