Articles of 矩阵

如何从偏航,俯仰和滚动中获得RotationMatrix

嗨我设法在我的Android应用程序中find偏航,俯仰和滚动加速度和磁传感器。 我现在想根据角度来旋转我的场景中的一个点周围的相机目标(min3d)。 结果是能够通过移动Android设备来查看3d场景。 我已经尝试了几天几乎阅读所有相关的答案,但我不能让它工作。 我得到的运动绝对没有感觉。 我确认我的偏航在0-360之间并且是正确的,音高在-90到90之间且是正确的,最后滚动在-180到180之间并且是一致的。 基本上我正在通过我的目标和向上矢量进行矩阵旋转和乘法。 float[] rotation = new float[16]; Matrix.setIdentityM(rotation, 0); Matrix.rotateM(rotation, 0, (float) Math.toDegrees(roll), 0, 0, 1); Matrix.rotateM(rotation, 0, (float) Math.toDegrees(pitch)+90f, 1, 0, 0); Matrix.rotateM(rotation, 0, (float) Math.toDegrees(-azimut), 0, 1, 0); float[] target = new float[4]; float[] source = new float[]{0,0,150,0}; Matrix.multiplyMV(target, 0,rotation, 0, source, 0); float targetX = target[0] + […]

在android中缩放和拖动图像

我需要拖动和缩放图像。 这是我的代码…… //instance variables Matrix matrix = new Matrix(); Matrix savedMatrix = new Matrix(); static final int NONE = 0; static final int DRAG = 1; static final int ZOOM = 2; int mode = NONE; PointF start = new PointF(); PointF mid = new PointF(); float oldDist = 1f; //用于imageview的OnTouchListener OnTouchListener touchAction = new […]

Android OpenGL 3D采摘

我使用的是Android OpenGL-ES 2.0,并且考虑到它带来的所有限制,我无法弄清楚如何将2D屏幕触摸带到我拥有的3D点上。 我无法得到正确的结果。 我正在尝试将射线射入点云,然后我可以比较我的点与光线的距离,find最近的点。 public class OpenGLRenderer extends Activity implements GLSurfaceView.Renderer { public PointCloud ptCloud; MatrixGrabber mg = new MatrixGrabber(); … public void onDrawFrame(GL10 gl) { gl.glDisable(GL10.GL_COLOR_MATERIAL); gl.glDisable(GL10.GL_BLEND); gl.glDisable(GL10.GL_LIGHTING); //Background drawing if(customBackground) gl.glClearColor(backgroundRed, backgroundGreen, backgroundBlue, 1.0f); else gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); if (PointCloud.doneParsing == true) { if (envDone == false) setupEnvironment(); // Clears the […]

Android:使用矩阵绘制位图

即时通讯尝试在canvas上学习绘制位图 drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint); 因为我需要我的一个png几乎每一帧增加它的大小,我设法做到这一点 Matrix matrix=new Matrix(); matrix.setScale(0.001f,0.001f); 这对我来说很好。 但我遇到的问题是将图像放在正确的坐标中。 我以为其中任何一个都会这样做 matrix.setTranslate(X,Y); matrix.postTranslate(X,Y); 但这就是我错的地方,图像总是在0,0坐标上绘制。 在我需要缩放图像之前,我使用得很好 canvas.drawBitmap(bmp,x,y,paint); 在哪里我可以指定它的绘制点。 我也可以使用矩阵版本的drawBitmap吗? 或者我应该如何经常调整我的图像大小?

Matrix.postScale(sx,sy,px,py)如何工作?

首先阅读泰格的问题 泰格说: 调用Matrix.postScale时(sx,sy,px,py); 矩阵得到缩放并被翻译(取决于给定的点x,y)。 这预示着这种方法可用于放大图像,因为我可以轻松地聚​​焦一个特定的点。 android doc描述了这样的方法: Postconcats the matrix with the specified scale. M’ = S(sx, sy, px, py) * M 乍一看这看起来很荒谬,因为M应该是3×3-Matrix。 挖掘我发现android使用4×4-Matrix进行计算(同时只在其API上提供3×3)。 由于此代码是用C语言编写的,因此我很难理解实际发生的情况。 我在Wolfram看到了视觉变换 我的问题和泰格一样 我真正想知道的是:如何将这种缩放(有重点)应用于我可以在Java代码中访问的3×3 Matrix? 谁能给我一个例子和2d-scaling公式,其中包含一个10岁孩子能理解的4个参数(sx,sy,px,py)?

Android – 绘制将位图旋转到canvas上的特定位置

好吧也许我在这里遗漏了一些东西,但我被困了好几个小时。 我创建了一个应用程序,用户在图片上绘制尺寸线。 现在我想绘制一些选择点,表明该行已被选中。 这些点是一个特定的位图,必须位于该行的末尾(箭头后)并根据箭头旋转。 我创建了一个扩展View的类DrawSelectionPoint,我可以使用以下内容旋转位图: selectionPoint = BitmapFactory.decodeResource(context.getResources(), R.drawable.selectionpoint); Matrix matrix = new Matrix(); matrix.postRotate((float)Math.toDegrees(angle)); canvas.drawBitmap(selectionPoint, matrix, null); (其中angle是直线的角度)这样我的位图按照我想要的方式旋转,但是它绘制在点0,0(屏幕的左上角)。 如果我使用类似的东西 canvas.save(); canvas.rotate(); canvas.drawBitmap(selectionPoint, x, y, null); canvas.restore(); 然后我发现在我想要的确切位置绘制位图太难了(因为我在旋转的canvas上绘制,然后我旋转回来)。 我尝试了一些欧几里德旋转变换,但我没有运气。 有没有办法应用矩阵旋转,并给出我需要绘制位图的点? 先谢谢你!

Android Matrix,getValues()返回什么?

我无法计算下面代码的返回值pMeasure = PathMeasure,m = Matrix,distCount是沿路径的距离 pMeasure.getMatrix(distCount, m, 0x01 | 0x02); m.getValues(float[] values) float [2]&float [5]分别是位置x和y,但我无法弄清楚其余部分 任何帮助再一次赞赏。

drawBitmap:如何设置坐标并使用矩阵?

我一直在查看文档和唯一允许Matrix作为参数的drawBitmap()不按参数采用任何types的屏幕坐标。 我正在使用以下代码绘制矩阵旋转的位图: Matrix matrix = new Matrix(); matrix.setRotate(rotation,bitmap.getWidth()/2,bitmap.getHeight()/2); canvas.drawBitmap(bitmap, matrix, null); 当然,我的位图是0,0 。 如何设置位置并使用矩阵? 理想情况下,我想使用目标Rect: this.destRect = new Rect( x – spriteWidth / 2, y – spriteHeight / 2, x + spriteWidth / 2, y + spriteHeight /2 ); 编辑: 以下建议在评论中我试过这个: Matrix matrix = new Matrix(); matrix.setTranslate(x, y); matrix.setRotate(rotation,bitmap.getWidth()/2,bitmap.getHeight()/2); canvas.drawBitmap(bitmap, matrix, null); 但无济于事。 位图仍然是0,0绘制的 EDIT2: […]

在某些情况下,在Android上将图像扭曲为四边形会失败

我正在使用matrix.setPolyToPoly函数将位图的选定区域(4个角)转换为矩形,通常它工作得很棒。 但在下一个例子中: polyToPoly函数未通过透视变换: 我画了两行进行测试,这些线标记了我想要四个选定点的位置。 我做错了什么? 谢谢! 编辑 :我已经使用canvas.drawBitmapMesh解决了问题,感谢pskink的建议!! 这是最终的代码 private float[] generateVertices(int widthBitmap, int heightBitmap) { float[] vertices=new float[(WIDTH_BLOCK+1)*(HEIGHT_BLOCK+1)*2]; float widthBlock = (float)widthBitmap/WIDTH_BLOCK; float heightBlock = (float)heightBitmap/HEIGHT_BLOCK; for(int i=0;i<=HEIGHT_BLOCK;i++) for(int j=0;j<=WIDTH_BLOCK;j++) { vertices[i * ((HEIGHT_BLOCK+1)*2) + (j*2)] = j * widthBlock; vertices[i * ((HEIGHT_BLOCK+1)*2) + (j*2)+1] = i * heightBlock; } return vertices; } private […]

了解ImageView Matrix的用法

我知道SO充满了Matrix问题,但我找不到一个完全解释的问题。 我猜任何ImageView都有一个Matrix,负责缩放,旋转和位置。 但为什么我不能像这样使用矩阵旋转图像: ImageView img = (ImageView)findViewById(R.id.some_imageview); img.setScaleType(ScaleType.Matrix); Rect bounds = img.getDrawable.getBounds(); img.getImageMatrix().postRotate(180f, bounds.width() / 2, bounds.height() / 2); 几个答案建议像这样做: ImageView img = (ImageView)findViewById(R.id.some_imageview); img.setScaleType(ScaleType.Matrix); Rect bounds = img.getDrawable.getBounds(); Matrix rotationMatrix = new Matrix(); rotationMatrix.postRotate(180f, bounds.width() / 2, bounds.height() / 2); img.setImageMatrix(rotationMatrix); 为什么每次我想要旋转时都要创建一个新的Matrix? 此外,如果我从第二个例子设置矩阵,如果我再次设置rotationMatrix ,为什么它不再旋转(到原始程度)? 如果我想获得原始学位,我可以设置一个简单构造的矩阵。 但同样,我不明白为什么 img.getImageMatrix().postRotate(180f, bounds.width() / 2, bounds.height() / 2); 不管用。 […]