首页 > 其他分享 >计算画布内旋转元素的边界坐标

计算画布内旋转元素的边界坐标

时间:2023-05-30 22:33:53浏览次数:39  
标签:maxX 内旋转 Infinity 元素 画布 maxY 坐标 Math

svg,dom类的图形编辑器,在画布内编辑元素完成后,为了得到只包含元素的部分,去掉画布的留白,或者进行编组时,往往需要计算元素在画布内的边界坐标,重新生成输出元素的坐标

1、对于无旋转等几何变化的基本元素,计算元素的边界坐标是很容易的(以屏幕坐标为准)

如下图,只需遍历每个元素的四个顶点坐标比较即可;

nsj3azbv17.png

假设已知元素css属性 left = x,top = y ,width = w ,height = h;

对于任意元素四个顶点坐标分别为,(左上,右上,左下,右下)

\[pointLT\ =\ (x,\ y),pointRT\ =\ (x\ +\ w,\ y) \]

\[pointLB\ =\ (x,\ y + h),pointRB\ =\ (x+w, y + h) \]

代码为

let minX = Infinity, minY = Infinity, maxX = -Infinity , maxY = -Infinity;
elements.forEach(ele=>{
    const points = [pointLT,pointRT, pointLB, pointRB ];
    points.forEach(point=>{
     minX = Math.min(minX, xx);
     maxX = Math.max(maxX, xx);
     minY = Math.min(minY, yy);
     maxY = Math.max(maxY, yy);
    })
})

实际开发中,编辑器往往会对元素会有旋转反转裁剪等几何变化,如下图为实验仪器的组合,其边界可能为最左侧的旋转的玻璃棒和右侧旋转的试管决定

nvnvhrvs8k.png

为了需重 新计算单个仪器旋转后的坐标和边界,从而 那么变化后的坐标如何计算呢

2、带有旋转属性的元素坐标计算

以元素中心E点为中心建立坐标系

g9nj5an6z.png

A'B'C'D'为ABCD旋转θ ,后的矩形,已A点为例,连接EA,EA',根据向量的旋转角度公式有

\[\overrightarrow{EA'}\ =\ (A_{x}*\cos\theta\ -\ A_{y}*\sin\theta,\ A_{x}*\sin\theta\ +\ A_{y}*\cos\theta) \]

以上坐标是基于中心点坐标的,so可以用中心点的坐标E表示A'坐标,从而换算会屏幕坐标,(注意屏幕坐标的基是(0,1)(-1,0),故y需取负值)

\[A_{x}(屏幕坐标) = E_{x}(屏幕坐标) + A_{x}(对象坐标) \]

\[ A\_{y}(屏幕坐标) = - E\_{x}(屏幕坐标) + A\_{y}(对象坐标) \]

更新上一段代码为:

let minX = Infinity, minY = Infinity, maxX = -Infinity , maxY = -Infinity;
elements.forEach(ele=>{
    const vertices = [pointLT,pointRT, pointLB, pointRB ];
    // ...
    vertices.forEach((x,y)=>{
     let xm = cx + (x - cx) * cos - (cy - y) * sin;
     let ym = cy - ((x - cx) * sin + (cy - y) * cos);
     minX = Math.min(minX, xm);
     maxX = Math.max(maxX, xm);
     minY = Math.min(minY, ym);
     maxY = Math.max(maxY, ym);
    })
})

标签:maxX,内旋转,Infinity,元素,画布,maxY,坐标,Math
From: https://www.cnblogs.com/pangys/p/17444687.html

相关文章

  • IText PDF签章时,如何获取PDF页的坐标
    文章目录在itext中如何获取pdf矩形区域的坐标起因解决方法常用版本itext5itext7常见的几种坐标偏移方式沿Y轴下移沿X轴偏移总结在itext中如何获取pdf矩形区域的坐标起因最近在使用ITEXT工具做PDF的电子签章时发生了印章签在PDF区域外的问题,PDF的默认坐标系为X、Y坐标......
  • cartographer代码——世界坐标系点和像素坐标系点的转换
    构建栅格地图,要弄清楚坐标之间的关系。本篇根据代码,画出了坐标转换的关系。如下图:cartographer中的代码如下://Returnstheindexofthecellcontainingthe'point'whichmaybeoutside//themap,i.e.,negativeortoolargeindicesthatwillreturnfalsefo......
  • js百度地图计算两经纬度坐标点的距离
    百度地图提供现成的方法,直接调用就可以了Map类getDistance(start:Point,end:Point)Number返回两点之间的距离,单位是米。(自1.1新增)varmap=newBMap.Map("container");varpoint1=newBMap.Point(lng1,lat1);varpoint2=newBMap.Point(lng2,lat2);vardistanc......
  • 计算两个经纬度坐标之间的距离值
    importjava.util.*;importjava.math.*;/***计算两个经纬度坐标之间的距离值*src:https://blog.csdn.net/zhuxiaoping54532/article/details/53671641*/publicclasstest1{privatefinalstaticdoubleEARTH_RADIUS=6378.137;publicstaticvoidm......
  • Premiere调整画布尺寸
    软件版本:PremiereProCC7.0在已有项目中:文件→新建→调整图层(把焦点定位在下方轨道栏,否则呈灰色,无法点击)。右击新建的调整图层,选择“从剪辑新建序列”——这样就建好了一个自定义视频尺寸的编辑轨道。----------------------------------------------------------------------......
  • 2023年5月最新全国省市区县和乡镇街道行政区划矢量边界坐标经纬度地图数据 shp geojso
    发现个可以免费下载全国 geojson 数据的网站,推荐一下。支持全国、省级、市级、区/县级、街道/乡镇级以及各级的联动数据,支持导入矢量地图渲染框架中使用,例如:D3、Echarts等geojson数据下载地址:https://geojson.hxkj.vip该项目github地址:https://github.com/TangSY/echarts-m......
  • 伺服驱动器,你还在为伺服驱动器 FPGA架构苦恼吗,本方案FPGA代码实现电流环 速度环 位
    伺服驱动器,你还在为伺服驱动器FPGA架构苦恼吗,本方案FPGA代码实现电流环速度环位置环SVPWM坐标变换测速分频滤波器等,程序方便移植不同的平台,具有很高的研究价值ID:173999686717298156......
  • Matlab根据flac、pfc或其他软件导出的坐标及应力、位移数据再现云图
    Matlab根据flac、pfc或其他软件导出的坐标及应力、位移数据再现云图案例包括导出在flac6.0中导出位移的fish代码(也可以自己先准备软件导出的坐标数据及对应点的位移或应力数据,可根据需要自行修改为自己需要的云图数据)、matlab中读取三维坐标及位移数据然后云图呈现的代码ID:61100......
  • 客户端javascript对象的几何属性(获得大小及坐标)
    在一些客户端javascript对象中,存在着如宽度、高度、坐标类的几何属性,同时这些属性在不同的浏览器下又有不同的属性名。现在将所有的此类对象的几何属性汇总,便于学习,免得搞混。1.浏览器窗口在桌面的坐标(x,y)Window      IE下:window.screenLeft,window.screenTo......
  • matlab程序,改进人工势场法模拟机器人路径规划与避障,障碍物的个数和坐标可以手动修改。
    matlab程序,改进人工势场法模拟机器人路径规划与避障,障碍物的个数和坐标可以手动修改。程序采用了模糊规则与人工势场算法相结合的方式来实现路径规划与避障。起点坐标,终点坐标,障碍物坐标,障碍物个数都可以在程序里直接改。ID:3960662710091016......