Tag: 旋转

在OpenGL中获取X,Y和Z轴上的弧度相机旋转?

我正在尝试在OpenGL中的各个轴上获取相机旋转(但具体使用Java,LWJGL和jME)。 相机对象允许我将方向作为Vector3f,但这似乎不能用于获得分量旋转; 每个轴显示与另一个轴相关联。 我发现带有偏移的角度分量toAngleAxis是一个快速的黑客,但在大多数情况下无法正常工作。 不幸的是,我不太擅长数学,否则我可能已经解决了这个问题:)再次,我只需要X,Y和Z轴分量和弧度,从0弧度到2 PI弧度。 有人可以帮忙吗? 克里斯,先生干杯谢谢

Java Tetris轮换

我知道这已被问了很多,但我想知道如何旋转俄罗斯方块片? 我已经做了一个漫长而糟糕的解决方案(约170行代码),但应该有更简单的方法。 我的俄罗斯方块由4个块组成,这些块都知道它们在矩阵中的位置(行和列)。 矩阵本身是字符型的,因此4个字块都是字母。 它看起来像这样: …… ..T… .TTT.. …… 我试图通过计算中间行和列并将其用作原点来模拟我的矩阵作为坐标系,然后尝试应用我发现的这个简单算法:90度旋转(x,y)=( – y,x) 它似乎只有在我的作品位于矩阵的中心时才有效。 我不知道我应该做什么,我一整天都在想这个。 这是我的方法: public void rotatePiece(ArrayList random) { int distance = 0; // how far is the origo for (int i=0; i < 4; ++i) board[random.get(i).getRow()][random.get(i).getColumn()] = '.'; // erases the current location of the piece for (int i=0; i < 4; ++i) […]

四元数平滑旋转

四元数不仅可以描述旋转,还可以描述方向,即从初始(零)位置旋转。 我希望模拟从一个方向到另一个方向的平滑旋转。 我计算了起始方向startOrientation和end orientation endOrientation并且希望将中间方向描述为startOrientation*(1-argument) + endOrientation*argument而argument从0变为1 。 猴子引擎更新function的代码如下: @Override public void simpleUpdate(float tpf) { if( endOrientation != null ) { if( !started ) { started = true; } else { fraction += tpf * speed; argument = (float) ((1 – Math.cos(fraction * Math.PI)) / 2); orientation = startOrientation.mult(1-argument).add(endOrientation.mult(argument)); //orientation = startOrientation.mult(1-fraction).add(endOrientation.mult(fraction)); log.debug(“tpf = {}, […]

java围绕中心旋转矩形

我想围绕它的中心点旋转一个矩形,它应该保留在它应该被绘制的位置并在该空间中旋转 这是我的代码: AffineTransform transform = new AffineTransform(); transform.rotate(Math.toRadians(45),rectangle.width/2, rectangle.height/2); Shape transformed = transform.createTransformedShape(rectangle); g2.fill(transformed) 旋转矩形但是在屏幕的不同部分绘制,我该如何纠正?

Libgdx旋转ModelInstance

我正在开发我的第一个libgdx 3D游戏。 到目前为止,我可以在迷宫般的(硬编码)世界中移动,碰撞检测工作。 我也有一些工作A *寻路的敌人。 我还使用FBX-Conv来获取.g3db文件,这是我的第一个(相当难看的)Blender模型。 由于某种原因,模特在地板上而不是站立。 当我将它导出为.fbx时,我可能有一些错误的设置。 为此我尝试rotate()他在z-Axis modelInstance.transform.rotate(Vector3.Z, 90) rotate() 90度,在我的Screen的show()方法中调用: modelInstance.transform.rotate(Vector3.Z, 90) ,加载Model并实例化我的ModelInstance (在给定的位置)。 由于某种原因,它没有旋转。 然后我将rotate方法放在render(delta) ,认为它现在每个渲染循环旋转90度。 但它反而停滞不前,就像它应该的那样。 好的,但是现在我希望modelInstance rotate到它实际看起来的位置,这意味着它应该旋转,这取决于我的enemie的Vector3 direction 。 我已经准备好使用modelInstance.transform.setTotranslation(enemie.getPosition())来完善自己的位置。 所以我想我也可以使用modelInstance.transform.setToRotation(Vector3 v1, Vector3 vs) ,其中v1 = enemie.getPosition()和v2 = enemie.getPosition().add(enemie.getDirection) 。 请注意, position Vector不会直接使用,因为它会在add()方法中更改其值。 这样做,我不再看到对象,这意味着它的位置也是错误的。 为什么会这样? 我如何通过使用direction向量来旋转我的modelInstance ? 非常感谢。

为什么我的四元数不能正常旋转?

好吧,我们不是在讨论OpenGL这个问题,但是这将与OpenGL ES 2.0一起使用。 问题:如何使用以下代码创建和旋转四元数? 我一直在阅读和研究这个问题,但仍然无法完全理解这些概念。 我以为我明白了,但是一旦我开始进行一些计算来旋转四元数,我意识到我甚至无法回到我开始的地方。 所以我们假设我们有一个立方体,它的中心位于(0,0,0)。 我们想在x轴上旋转45度。 我该怎么办? (只有四元数) 假设成功,你如何从’W’获得轮换量? 我知道’1’表示没有旋转,但如果它旋转了173度怎么办? 试图旋转到给定的方向,45度,然后从W获得该值。我觉得我需要将角度转换为rads或其他东西,但不完全确定。 在线教程因人而异。 这是我的代码: import java.util.Scanner; import Quaternion; public class Main { public static void main(String[] args) { Quaternion q1 = new Quaternion(0, 0, 0, 1); Quaternion q2 = new Quaternion(0, 0, 0, (float) Math.cos(toRAD(45.0f) / 2)); q1 = q2.mul(q1); System.out.println(“q1: ” + q1.getX() […]

在Java中旋转多边形

我正在编写的程序在屏幕上绘制多个星星,并为它们提供随机的方向和速度。 星星会从面板的边缘反弹并留在里面。 我需要让星星在移动时旋转。 我尝试了很多东西,我无法弄明白。 下面是我用来绘制星星并移动它们的代码。 附加信息: – 星星在一个名为“星星”的集合中 – 我写了两个类,“Star”和“MyJPanel” 设点:(星级) for (double current = 0; current < nPoints; current += 1) { i = (int)current; int[] X = new int[nPoints * 2]; int[] Y = new int[nPoints * 2]; cosX = -(Math.cos(current*((2*Math.PI)/(nPoints)))*radius[i % 2]); sinY = -(Math.sin(current*((2*Math.PI)/(nPoints)))*radius[i % 2]); X[i] = (int) cosX+x; Y[i] […]

通用简单3D矩阵旋转问题

我的3D对象上的旋转有问题(它在java中但它并不重要) 的背景: 我有一个简单的3D模型,你是它上面的第一人称游戏,你向上移动鼠标向上移动(IE按3D的x轴旋转)并向下移动鼠标向下看(向相反方向旋转) 但: 我还有左右箭头键左/右转动(旋转3D的y轴) 现在问题是,当我转动时,当我按x轴旋转时,它不再按预期转动,即如果你转动180度,通过向下移动鼠标实际上是向上看,如果你向上移动鼠标,你实际上看起来下。 我可以在x / y轴上执行什么旋转来修复此问题? – 无论我转动了多少/一点点,向上移动鼠标都会向上移动,向下移动鼠标会向下看。 对不起,我无法更好地解释,但如果您需要更多信息,请发表评论。 非常感谢, 这可能是一个简单的转变,但我想不到:( 一些Java旋转代码: 鼠标向上/向下: public void rotateXY(double radians, double Yradians) { vpTrans.getTransform(T3D); Transform3D test = new Transform3D(); Transform3D testX = new Transform3D(); Transform3D testY = new Transform3D(); translate.set(lastXcord, lastYcord, lastZcord); testX.rotX(radians); testY.rotY(Yradians); test.mul(testX, testY); test.setTranslation(translate); vpTrans.setTransform(test); //System.out.println(test); } // end of rotateXY() 左:(右边是相似但在角度变化时使用减号而不是加号) […]

旋转图像时背景为黑色

我正在尝试使用此代码旋转图像: File imgPath = new File(“c:\\tmp\\7.jpg”); BufferedImage src = ImageIO.read(imgPath); AffineTransform tx = new AffineTransform(); int width = src.getWidth(); int height = src.getHeight(); tx.rotate(radiant ,width, height); AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BICUBIC); BufferedImage out = op.filter(src, null); File outFile = new File(“c:\\tmp\\out.jpg”); ImageIO.write(out, “jpg”, outFile); 由于某种原因,旋转后的背景是黑色的。 如何使背景白色或透明?

Java:按指定的度数值旋转另一个

我试图在java中围绕另一个具有指定度数值的2D点旋转,在这种情况下简单地围绕点(0,0)在90度。 方法: public void rotateAround(Point center, double angle) { x = center.x + (Math.cos(Math.toRadians(angle)) * (x – center.x) – Math.sin(Math.toRadians(angle)) * (y – center.y)); y = center.y + (Math.sin(Math.toRadians(angle)) * (x – center.x) + Math.cos(Math.toRadians(angle)) * (y – center.y)); } 预期为(3,0):X = 0,Y = -3 返回(3,0):X = 1.8369701987210297E-16,Y = 1.8369701987210297E-16 预期为(0,-10):X = -10,Y = 0 […]