问题标签 [matrix-transform]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1987 浏览

wpf - MatrixTransform 与画布的宽度/高度相结合

放大画布上的绘图时,我需要显示滚动条。
画布位于 ScrollViewer 中,我增加了画布的宽度/高度,以便出现 scollbars(否则它们不会出现)。

要放大 1.1 倍,我使用以下代码:

事实证明,画布变得太大了。绘图放大了 10%,但宽度似乎变成了 20%,更像 1.1 的平方。所以我使用Math.Sqrt(f);而不是f.

任何人都可以解释为什么它会这样吗?

0 投票
1 回答
1532 浏览

python - 仅使用 for/while 循环在 Python 中转置 nxn 矩阵

我想知道为什么我写的解决方案不起作用:

它输出以下不正确的解决方案:

帮助将不胜感激!谢谢。

理想的正确解决方案:

将会:

0 投票
1 回答
49 浏览

opengl - 将视图体积从一种视图转换为另一种视图

所以我在世界空间中有一个对象和两个视图 A 和 B,它们显示具有不同相机设置的场景。我想将视图体积(近平面)从视图 A 转换为视图 B,这样我就可以获得概览和细节之类的东西。我必须对视点 A 在平面附近的平截头体应用哪些变换才能在视图 B 中显示它?

0 投票
0 回答
435 浏览

canvas - 创建一个具有旋转原点的二维变换矩阵

我试图让我的二维转换矩阵在我的 html 画布中工作。当我使用 0,0 的枢轴时,一切正常,但是一旦我想将旋转原点添加到黄色形状,它就无法按我的意愿工作。

http://i.imgur.com/TYeuUUP.jpg

黄色形状的中心应与红色形状的位置相同。枢轴的位置应该相对于形状,而不是世界。几年前我有解决这个问题的方法,但我不记得确切的计算方法。我知道我缺少 tx 和 ty 的东西。

有任何想法吗?

0 投票
1 回答
52 浏览

matrix - 处理 2+ 创建多个斜体文本图例

我想为条形图创建一个图例,如下所示:

在哪里 | :数据列,/:是每列的图例

我无法正确获取文本图例,尝试多个 maxtrix 转换,但没有一个能正常工作。

请帮忙 :(

0 投票
1 回答
584 浏览

javascript - 动画行星绕其父级运行,取决于父级的旋转状态

我正在尝试学习 Three.js,对这些技术很陌生。我实现了一个行星绕着太阳运行,而月亮绕着行星运行。我所关心的是,要做我目前所做的事情,我必须制作相当多的对象并在渲染循环期间执行相当多的计算。

1. 源代码:

WestLangley为我们提供了以更易于理解的方式呈现问题的小提琴,因此:

  • 这个小提琴现在看起来更像是它现在的样子——行星在太阳内部有它的父级,旋转那个父级将使行星轨道运行。updateMatrixWorld但是,除了每个行星/月球一个额外的物体外,在Object3D 方法期间,父旋转也会将行星旋转到位。所以它会比你想象的要快mesh2.rotateOnAxis( AXIS, 0.01 );一点。
  • 这个小提琴展示了一种没有父母的方法。案例是,我正在尝试找到方法,我可以在系统启动时配置行星位置/旋转速度/轨道速度,而不仅仅是提供服务器时间,所以它会让处于同一位置的玩家之间感觉同步.

3. 质疑本身

就我浏览手册而言,我发现可能有可能使用 Three.js 矩阵逻辑执行此类动画。我愿意尽可能减少::animate()内部对象的使用(可能通过覆盖updateMatrixupdateMatrixWorld方法)。不幸的是,我的英语和数学都不够好,无法理解,这些矩阵是怎么回事。如果有人可以帮助我,我将不胜感激。

四、目前工作进展

工作小提琴就在这里。我能够创造一个星球并拥有几乎所有我想要的东西。剩下的一个问题是,想要以更随机的角度运行行星轨道。

0 投票
1 回答
150 浏览

java - 使用java将矩形转换为特定形状

有没有办法将矩形转换为图像中显示的形状..? 转型

我已经尝试了所有可以使用 AffineTransform 来做到这一点的方法。但我无法得到预期的结果。我想确定这是一项不可能完成的任务还是有办法做到这一点。

0 投票
0 回答
244 浏览

android - 矩阵翻译翻译不正确

我现在正在工作 ImageView 和 Matrix 翻译。我尝试使用此代码翻译图像。

使用上面的代码,ImageView 在屏幕左上角显示左上角图像(编号 1)。然后我尝试将转换值更改为matrix.postTranslate(-1280, -960);我期望的(数字 3)是屏幕外显示的图像,因为图像尺寸为 1280 x 960 像素。但结果就像下图(数字 2)。

在此处输入图像描述

*黑色矩形是我设备屏幕上显示的内容。

我的问题是为什么将图像转换为 -1280,-960 只会将图像移动到中心?翻译单位不是像素吗?还是我在这里犯了错误?我的设备是三星 Note 3 Neo,分辨率为 720 x 1280 像素。

0 投票
1 回答
813 浏览

android - 使用 OpenGL 矩阵变换将纹理从“1D”映射到“2D”

(带着这个问题,我试图调查我解决另一个问题的想法)

如果我在内存中有一个标准的二维数组宽度高度,我可以把它变成一个长度的一维数组宽度*高度的一维数组,然后通过index = x + y * width对其进行索引。这种映射在为数组分配和释放内存时非常有用,因为内存管理器不需要担心以 2D 形式打包结构,而只需要担心以 1D 表示的每个分配数组的总长度。

我正在尝试查看是否可以使用相同的方法对 OpenGL 纹理进行图像内存管理。这个想法(如上面链接的问题中所述)是将一大堆所需的纹理组合成一个更大的纹理,方法是将它们打包(即,将它们彼此相邻绘制)到大纹理中。这有助于在渲染过程中最大限度地减少昂贵的纹理绑定操作。

假设我的大纹理是 8×8 像素(即总共 64 像素):

我想在其中存储一个 5×5 图像和一个 4×5 图像(即总共 25 + 20 = 45 个像素)。从技术上讲,我有很多可用的像素,但我不能将这些图像彼此相邻放置到大纹理中,因为这需要一个方向的最小尺寸为 9,而另一个方向的最小尺寸为 5。

如果我可以简单地将我的 8×8 纹理视为 64 个连续像素的内存并将两个图像映射到其中的 1D 内存块中,我可以在纹理中按如下方式排列图像: 8x8 纹理:

如果我以 1:1 的比例绘制所有图像,即任何地方都没有小数像素坐标,也不需要任何线性过滤或其他像素混合,是否可以提出一个可以用来绘制 4 ×5 图像使用此纹理?

使用顶点和片段着色器,这看起来可能相当容易(除非我忘记了什么;我还没有尝试过):

  • 顶点着色器将要绘制的图像的四个角映射到以 64×1 图像表示的纹理:

    • a: (0, 0) → (0 + 0*4 + 25, 0) = (25, 0) 其中 25 是 4×5 图像的偏移量
    • d: (3, 0) → (3 + 0*4 + 25, 0) = (28, 0)
    • q: (0, 4) → (0 + 4*4 + 25, 0) = (41, 0)
    • t: (3, 4) → (3 + 4*4 + 25, 0) = (44, 0)

    纹理内其他坐标的插值应该(?)然后也映射到沿着这条线的正确偏移以获取整数坐标

  • 片段着色器通过简单地将除以 8 的商和余数,将这个 64×1 坐标转换为最终的 8×8 坐标,例如:
    • a: (0, 25) → (25 % 8, 25 / 8) = (1, 3)
    • d: (0, 28) → (28 % 8, 28 / 8) = (4, 3)
    • k: (0, 35) → (35 % 8, 35 / 8) = (3, 4)
    • q: (0, 41) → (41 % 8, 41 / 8) = (1, 5)
    • t: (0, 44) → (44 % 8, 44 / 8) = (4, 5)

不幸的是,自定义着色器需要 OpenGL ES v2.0 或更高版本,并非在所有设备上都可用。

是否有可能仅通过 OpenGL ES 1.1 提供的矩阵转换来实现这种映射?

0 投票
1 回答
1531 浏览

css - 矩阵比例转换不起作用

我必须使用变换矩阵来动画变换:元素的比例。

我想从 0 缩放到 1。如果我使用以下代码,它可以正常工作:

https://jsfiddle.net/w4kuth78/1/

如果我使用矩阵本身,它就不起作用

https://jsfiddle.net/m7qpetkh/1/

我做错了什么还是这不起作用?我想知道,因为它在 Chrome 和 Firefox 中不起作用......

console_log 调试输出表明,在从 0 缩放到 1 时,矩阵也会从 matrix(0,0,0,0,0,0) 设置为 matrix(1,0,0,1,0,0)。

编辑:

完全混乱...如果我将矩阵中的 scaleX 和 scaleY 值更改为 0.1 或 0.01 它可以工作...哇