这最近几天一直在杀我.甚至没有开玩笑,但我一直在强调这个试图解决它.

我目前正在尝试使用仿射变换矩阵在HTML5中创建等轴投影.
我收到的瓷砖是一个旋转45度的正方形(基本上是方形帆布上的方形钻石).然后,我根据x或y方向是否存在增量来缩放其中一个轴.
然后我将轴倾斜一个因子来拟合.然后,我通过向后旋转-45度来否定初始旋转.

目前,我的仿射矩阵是:

// note: the difference in z is about 10 in this example,//       so,xDiff is usually 40
      var xDiff  = 4 * (center.z   - map[x+1][y].land.z);
      var yDiff  = 4 * (center.z   - map[x][y+1].land.z);

      var matrix = multiplyAll(
        // Rotation
        [COS45,SIN45,-SIN45,COS45],// Scale in each respective axis
        [(44+yDiff)/44,(44+xDiff)/44],// Skew each axis
        [1,-yDiff/(44+yDiff),-xDiff/(44+xDiff),1],// Negate the rotation
        [NCOS45,NSIN45,-NSIN45,NCOS45]
      );

然后我用它绘制它:

// the map has its own x & y values which directions are determined by the red x & y arrows in the picture
      // pX & pY are the point relative to the canvas origin
      var pX = x * 22 - y * 22 + 22;
      var pY = y * 22 + x * 22 - 22 - (center.z * 4);
      context.setTransform(matrix[0],matrix[1],matrix[2],matrix[3],300,100);

      //m_Context.drawImage(image,pX,pY);
      drawDiamond(pX,pY,true); // draws a 44x44 diamond

如您所见,变换后的矩阵是相对于变换后的x轴绘制的(我认为“新”x轴的斜率为yDiff / 44).我不确定如何绘制形状,以便转换后的结果将处于正确的位置.使用pY = x * 22 – (yDiff / 10);似乎更接近这一点,但我通过插入随机数字几乎猜对了.

TL;博士:

>我进行了转型
>我有一个瓷砖应该是的坐标(如果没有变换)
>如何计算所需的偏移量,以便变换后的tile的坐标与未转换时的坐标相同?

PS:底部的怪异钻石现在可以忽略,因为他们可以correctly be created一次我发现如何计算偏移量.

解决方法

仿射变换矩阵([a b c d e f])表示两个等式
x' = ax + cy + e
y' = bx + dy + f

因此,您可以使用偏移e和f来绕过缩放和偏移部分(嵌入在2×3或3×3矩阵中的4×4线性变换).

这在postscript编程中经常使用,其中用于绘制对象的坐标是相对于本地原点的.如果要连接矩阵,请在缩放和倾斜之前进行平移,并且e和f值将保持不受干扰.

javascript – 仿射变换矩阵偏移量的更多相关文章

  1. HTML利用九宫格原理进行网页布局

    这篇文章主要介绍了HTML利用九宫格原理进行网页布局,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. ios – 围绕x轴旋转AVAssetWriter的输出180度

    我正在使用AVAssetWriter创建一个Quicktime电影文件.目前输出视频是“倒置”.理论上,我可以通过围绕水平轴旋转180度来纠正这个问题.最好的方法是什么?Appledocs和wikipedia都没有明确说明仿射变换矩阵是如何工作的.并且可能有更好的方式.解决方法如果要围绕z轴旋转视频180度,或者如果你想在x轴上反射

  3. ios – CGAffineTransformInvert:奇异矩阵

    我偶尔会看到错误消息:在Xcode的日志记录区域.当我在UIWebView中调整网站大小时,这似乎很少发生.[商业网站,不是我自己的.]由于我在我的应用程序中没有进行仿射转换,我想知道这可能是UIWebView的错误/功能.如果是这样,我可以忽略它,因为它似乎没有干扰任何东西吗?解决方法通过查看其他帖子,如果您尝试将缩放比例设置为零,则会显示此消息.当您捏合并查看它是否为零时,NSLog对缩放值有用.

  4. uinavigationcontroller – 修复UITableViewController由于UIRefreshControl在iOS 7中的偏移量

    解决方法找到一个解决方案,同时戳更多;希望能救人几个小时!我需要在viewDidLoad:后实例化我的UIRefreshControl,或者至少在代码之前避免将其attributTitle设置为代码.设置viewDidLoad中的字符串:弄乱了iOS的控制表视图的布局,但在viewWillAppear中可以:或几何设置后更改.而我认为82分是UIRefreshControl的高度.在IB中设置刷新标题也可以避免这个问题,除了我在代码中这样做,因为我不想在每一个表中都必须启用IB刷新.

  5. Swift 2.0学习笔记Day 35——会使用下标吗?

    下标Swift中的下标相当于Java中的索引属性和C#中的索引器。getter访问器是一个方法,在最后使用return语句将计算结果返回。setter访问器“新属性值”是要赋值给属性值。参数的声明可以省略,系统会分配一个默认的参数newValue。可以自定义一个二维数组类型,然后通过两个下标参数访问它的元素,形式上类似于C语言的二维数组。

  6. Swift - 动画效果的实现方法总结附样例

    在iOS中,实现动画有两种方法。这三个方法都是类方法。里面可以设置动画的效果。

  7. 《从零开始学Swift》学习笔记Day 35――会使用下标吗?

    下标Swift中的下标相当于Java中的索引属性和C#中的索引器。getter访问器是一个方法,在最后使用return语句将计算结果返回。setter访问器“新属性值”是要赋值给属性值。参数的声明可以省略,系统会分配一个默认的参数newValue。可以自定义一个二维数组类型,然后通过两个下标参数访问它的元素,形式上类似于C语言的二维数组。

  8. swift - tableView的fream, contentInset, contentOffset, contentSize等属性

    fream类型:CGReckx:相对于父控件,在父控件中的坐标x值y:相对于父控件,在父控件中的坐标y值height:自己的高度width:自己的宽度contentOffset类型:CGPointx:相对于自己,自己的内容在x轴的偏移量y:相对于自己,自己的内容在y轴的偏移量contentInset在内容周围添加额外的滚动区域类型:UIEdgeInsetstop:上left:左bottom:下right:右

  9. SnapKit更新约束-Swift3.0

    导入SnapKit修改约束建立约束

  10. 用Swift3实现n*n阶矩阵逆时针输出

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部