外层元素旋转,其包括在内的子元素一并旋转(不改变旋转中心),单元测试

C++实现基2时间抽取FFT算法:从原理到工程实践 离散傅里叶变换(DFT)是信号处理中连接时域与频域的核心数学工具,它将信号分解为不同频率的正弦波分量,从而揭示信号的频谱结构。然而,直接计算DFT的复杂度为O(N²),难以满足实时处理需求。快速傅里叶变换(FFT)通过分治策略,将计算复杂度降至O(N log₂ N),实现了效率的飞跃。其技术价值在于为音频处理、通信系统、振动分析等领域的实时频谱分析提供了算法基础。基2时间抽取FFT作为最经典的实现,通过蝴蝶运算、旋转因子预计算和原位运算等优化,在嵌入式系统和性能敏感场景中尤为重要。本文以C++为例,深入探讨 阅读详情

思路:元素外层中心(坐标系中心)旋转后坐标,元素中心旋转后坐标,计算偏移坐标。
在这里插入图片描述

在这里插入图片描述

    中心点 cx: {{resize.x+resize.w/2}}, cy: {{resize.y+resize.h/2}}
    <br />
    <label>
      角度:
      <input v-model.number="rotate" type="number" step="30" />
    </label>
    <br />
    <label>
      x 平移:
      <input v-model.number="resize.x" type="number" @input="inputX" step="50" />
    </label>
    <br />
    <label>
      y 平移:
      <input v-model.number="resize.y" type="number" @input="inputY" step="50" />
    </label>
    <br />
    <div
      class="resizebox"
      :style="{
      width: `${resize.w}px`, 
      height: `${resize.h}px`, 
      transform: `translate(${resize.x}px, ${resize.y}px) rotate(${rotate}deg)`}"
    ></div>
    <div
      :class="['itxm', `itxm-${idx}`]"
      v-for="(item, idx) in points"
      :key="idx"
      :style="{
      width: `${item.w}px`, 
      height: `${item.h}px`, 
      transform: `translate(${item.x}px, ${item.y}px) rotate(${rotate}deg)`}"
    >{{idx+1}}</div>
     
  </div>
</template>
<script>
export default {
  name: 'resizeRect',
  data() {
    return {
      rotate: 15,
      rotateOld: 0,
      resize: {
        x: 200,
        y: 200,
        w: 500,
        h: 300,
        r: 0,
      },
      resizeOld: {
        x: 200,
        y: 200,
        w: 500,
        h: 300,
        r: 0,
      },
      points: [
        {
          x: 200,
          y: 200,
          w: 50,
          h: 30,
          r: 0,
        },
         {
          x: 650,
          y: 200,
          w: 50,
          h: 30,
          r: 0,
        },
        {
          x: 300,
          y: 300,
          w: 50,
          h: 30,
          r: 0,
        },
        {
          x: 200,
          y: 470,
          w: 50,
          h: 30,
          r: 0,
        },
        {
          x: 650,
          y: 470,
          w: 50,
          h: 30,
          r: 0,
        },
      ],
      rangex: 0,
      rangey: 0,
    };
  },
  watch: {
    rotate() {
      this.watchRotate();
    },
  },
  mounted() {
    this.watchRotate();
  },
  methods: {
    watchRotate() {
      const cx = this.resize.x + this.resize.w / 2;
      const cy = this.resize.y + this.resize.h / 2;
      const rotateRange = this.rotate - this.rotateOld;
      this.points.forEach((v) => {
        console.log(JSON.parse(JSON.stringify(v)));
        if (!v.oldx) v.oldx = v.x;
        if (!v.oldy) v.oldy = v.y;
        // resize旋转为矩形参考
        const rotateEnd = this.recaculateXY({ x: v.oldx, y: v.oldy, cx, cy, rotate: rotateRange });
        // v.x + v.w / 2 , v.y + v.h / 2,  自身坐标需要勾股计算,这里暂时用 除 2
        const rotateThis = this.recaculateXY({ x: v.x, y: v.y, cx: v.x + v.w / 2, cy: v.y + v.h / 2, rotate: rotateRange });
        // 外层旋转坐标偏移 - 自身旋转坐标偏移
        const rangex = rotateEnd.x - rotateThis.x
        const rangey = rotateEnd.y - rotateThis.y 
        v.x += rangex;
        v.y += rangey;
        v.oldx  = v.x
        v.oldy  = v.y
      });
      this.rotateOld = this.rotate;
    },
    recaculateXY({ x, y, cx, cy, rotate }) {
      // 矩阵公式
      const rad = (rotate * Math.PI) / 180;
      const rotatedX = (x - cx) * Math.cos(rad) - (y - cy) * Math.sin(rad) + cx;
      const rotatedY = (x - cx) * Math.sin(rad) + (y - cy) * Math.cos(rad) + cy;
      return { x: rotatedX, y: rotatedY };
    },
    inputY() {
      const range = this.resize.y - this.resizeOld.y;
      console.log(range);
      this.rangey = range;
      this.points.forEach((v) => {
        v.y += range;
        v.oldy = v.y;
      });
      this.resizeOld = JSON.parse(JSON.stringify(this.resize));
    },
    inputX() {
      const range = this.resize.x - this.resizeOld.x;
      console.log(range);
      
      this.rangex = range;
      this.points.forEach((v) => {
        v.x += range;
        v.oldx = v.x;
      });
      this.resizeOld = JSON.parse(JSON.stringify(this.resize));
    },
  },
};
</script>

<style scoped>
.outbox {
  position: relative;
}
.resizebox {
  width: 500px;
  height: 300px;
  border: 2px dotted blue;
  position: absolute;
  left: 0;
  top: 0;
  &::after {
    content: '';
    width: 100%;
    height: 1px;
    background: red;
    display: block;
    position: absolute;
    top: 50%;
  }
  &::before {
    content: '';
    width: 1px;
    height: 100%;
    background: red;
    display: block;
    position: absolute;
    left: 50%;
  }
}
.resizebox2 {
  border: 1px solid black;
}
.itxm {
  background: green;
  position: absolute;
  left: 0;
  top: 0;
}
.itxm-1 {
  background: orange;
}
.itxm-2 {
  background: rebeccapurple;
}
</style>

–end

C++实现离散傅里叶变换:从数学公式到频谱分析实战 离散傅里叶变换是信号处理领域的核心数学工具,它将时域信号转换为频域表示,揭示了信号的频率成分。其原理基于复指数函数的正交性,通过计算信号与不同频率基函数的内积来分解频谱。在工程实践中,DFT为音频处理、图像分析和通信系统提供了关键的频域分析能力。本文以C++为工具,详细展示了如何将DFT的数学公式转化为可执行的代码,并探讨了其在频谱分析中的具体应用。通过实现基础DFT函数和逆变换,读者可以深入理解复数运算、算法复杂度等关键概念,并掌握验证代码正确性的方法。项目进一步涉及幅度谱计算和性能优化方向,为学习更高效 阅读详情

相关推荐

从原理到实现:手搓C++ FFT算法,掌握信号处理核心工具

快速傅里叶变换(FFT)是数字信号处理领域的基石算法,它将离散傅里叶变换(DFT)的计算复杂度从O(N²)降至O(N log N),其核心原理是利用复平面上单位根的对称性和折半引理,通过分治策略将大规模问题递归分解。这一突破性优化赋予了FFT极高的技术价值,使其成为卷积运算、频谱分析和滤波器设计等任务不可或缺的高效工具。在工程实践中,FFT广泛应用于音频处理、图像分析、通信系统和算法竞赛中的大数乘法等场景。本文以**嵌入式环境**和**性能优化**为切入点,深入探讨如何不依赖外部库,从零构建一个纯C++的、

weixin_34163553的博客 349

数据为中心的AI建模:从质量门禁到因果追踪的工程实践

在机器学习落地中,'数据为中心'(Data-Centric AI)已超越方法论演进,成为突破模型性能瓶颈的核心范式。其本质是将数据视为可优化、可验证、可版本化的工程对象,而非静态输入;原理上强调通过标注一致性、分布漂移检测、概念覆盖度等多维质量指标驱动建模闭环;技术价值在于显著提升模型鲁棒性与线上业务指标(如点击率、转化率),尤其在标注成本高、场景动态强的工业场景中效果远超模型调优;典型应用场景涵盖电商推荐、工业质检、医疗影像及智能客服等非结构化与结构化混合系统;本文聚焦真实项目中的数据质量门禁、物理约束增

weixin_34252090的博客 311

Flutter折叠控件ExpansionTile使用与优化指南

折叠控件是移动端UI开发中常见的交互组件,通过展开/折叠状态管理实现内容层级展示。Flutter的ExpansionTile基于Material Design规范,采用组合式设计思想,支持图标定制、动画效果和状态回调等特性。在技术实现上,它通过Widget树重组和动画控制器驱动,能够流畅处理用户交互事件。这类组件特别适合应用于设置菜单、多级列表、问卷表单等需要空间管理的场景。本文重点解析的ExpansionTile组件,通过children属性管理子元素集合,配合AnimationController可实现

weixin_42567752的博客 277

长方形旋转计算最后的外层宽高,单元测试

【代码】长方形旋转计算最后的外层宽高。

萝卜芹菜芽 336

AI开发稳健实践:从环境隔离到版本控制,安全管理DSH与Agent生态变化

在软件开发与AI工程领域,依赖管理和环境隔离是保障项目稳定性的基础技术。其核心原理在于通过创建独立的沙箱环境,避免不同项目或组件间的依赖冲突,从而确保应用行为的一致性和可复现性。这一实践的技术价值在于显著降低因版本不匹配、库冲突导致运行时错误的概率,提升团队协作效率和部署可靠性。在AI Agent开发、DSH插件集成等快速迭代场景中,面对诸如“agent execution terminated due to error”或“dify failed to launch plugin”等常见问题,系统化的环境

weixin_34013044的博客 431

最小包围盒:空间加速算法的核心原理与工程实践

在计算机图形学与游戏开发中,空间数据结构是优化碰撞检测、视锥体裁剪和光线追踪等任务的基础。其核心原理在于利用简单的几何体(如包围盒)来近似表示复杂对象,通过快速排除不可能相交的情况,将计算复杂度降低数个数量级。这项技术的核心价值在于实现高效的空间加速,广泛应用于实时渲染、物理模拟和空间索引等场景。其中,轴对齐包围盒(AABB)凭借其极简的相交测试逻辑(基于分离轴定理的简化形式)成为最常用的基础结构,而有向包围盒(OBB)则通过主成分分析(PCA)实现更紧密的包裹,在精度与计算成本间取得平衡。本文深入探讨了从

423

程序员思维破解行测图形推理:从算法视角重构解题方法论

你是否曾面对行测图形推理题时感到无从下手?作为开发者,我们习惯了用逻辑和算法解决问题,而图形推理本质上就是"可视化逻辑题"。本文将从程序员视角出发,为你重构一套基于算法思维的图形推理解题框架,让看似玄学的图形规律变成可系统化破解的逻辑问题。 ## 图形推理的本质:视觉模式识别的算法化 在行政职业能力测验中,图形推理通常占据10题左右,分值约0.8-1分/题。根据开发者2公务员项目中的[行测知识

gitblog_00618的博客 915

CSS clip-path 原理与实战:从polygon裁剪到Cesium地理围栏对齐

clip-path 是 CSS 中基于矢量路径的几何级渲染裁剪机制,区别于 overflow:hidden 的布局隐藏和 mask-image 的 Alpha 蒙版,其本质是绘制阶段前的像素级剔除。它依托 SVG 路径语法(如 polygon、circle、ellipse),以数学定义封闭区域,实现真正‘不可见即不可交互’的视觉控制。技术价值在于精准边界控制、零冗余渲染与合成层友好性,广泛应用于斜切卡片、液态玻璃效果、地图 HTML 标注对齐等场景。尤其在 Cesium 创建 polygon 等 GIS 可

weixin_33725722的博客 683

一言不合造轮子--撸一个ReactTimePicker

本文的源码全部位于github项目仓库react-times,如果有差异请以github为准。最终线上DEMO可见react-times github page 文章记录了一次创建独立React组件并做成NPM包的过程,将会涉及到React开发、单页测试、Webpack等内容。 先看下最终的效果~ 起因 因为我司的业务需求,需要有一...

weixin_34323858的博客 541

开箱即玩的Pygame俄罗斯方块源码包,含完整游戏逻辑与图形资源

直接下载解压就能运行的Python俄罗斯方块小游戏,基于Pygame框架开发,支持标准操作:方块自动下落、方向键控制移动、空格键快速下落、上键旋转、消除满行计分、等级随得分提升。项目结构清晰,main.py是启动入口,blocks.py封装了七种经典方块的形状定义、旋转逻辑和碰撞判断,配套一张‘俄罗斯方块.png’作为界面背景图。附带requirements.txt明确依赖(仅pygame),兼容Python 3.7及以上版本,无需额外安装或配置。适合想动手理解游戏主循环、键盘事件监听、网格坐标管理、行消除

oo7890的博客 172

AI Agent评估:指标、策略与最佳实践

AI智能体正逐渐融入到各个领域,从日常的对话助手到复杂的工作流程自动化,其应用范围不断拓展。然而,确保这些智能体能够可靠、高效地完成任务至关重要,这就使得AI智能体评估成为了人工智能发展过程中不可或缺的一环。本文将深入探讨AI智能体评估的指标、策略以及最佳实践,为读者全面解读这一关键领域。

llm_way的博客 3498

Software Construction Lab1

哈工大2022软件构造实验一

hxhx2009_2020的博客 247

Java本地AI推理初体验:Jlama+LangChain4j构建离线问答系统

Jlama 是专为 Java 生态设计的现代化大型语言模型(LLM)推理引擎,旨在让开发者无需依赖外部服务即可直接在 Java 应用中运行本地化模型推理。本文将结合Jlama + langchain4j 实现一个本地可运行的简单问答Demo。

2501_92589102的博客 407

混合基FFT优化:C++实现与性能提升实践

快速傅里叶变换(FFT)是信号处理与频谱分析的核心算法,它将时域信号高效转换为频域表示。其原理基于离散傅里叶变换(DFT)的分治策略,通过蝶形运算减少计算复杂度,在音频处理、图像压缩和通信系统中具有极高的技术价值。传统基-2或基-4 FFT对数据点数有严格限制,而混合基FFT通过组合不同基的蝶形运算单元,提升了算法灵活性。本文聚焦于混合基FFT的C++优化实现,针对循环展开和旋转因子查表等关键点进行深度优化,并结合SIMD指令集与缓存友好访问,显著提升了运算效率,为实时信号处理等高性能场景提供了可靠解决方案

djph26741的博客 631

【GD32F407】i2c主机发送,从机中断接收

前言 现在手里负责的一个项目需要用i2c和主芯片进行通信主动发送,中断接收,这就需要支持i2c主机模式和从机模式,先查看原理图 这里我们用到了两条i2c总线进行数据的交替传输,避免在使用一条总线是发送数据和接收数据冲突 初始化i2c控制器 s32_k i2cDevInit(u8 byBusId, TI2cBus *pTI2cBus) { //PCLK = 36000000 BOOL retFlg = FALSE; int I2xSCL = pTI2cBus->byFastMode ?

Enosji的博客 6244

逆变器、转换器、DCDC、继电器等器件的原理和作用

交流电变成直流电的过程:整流==》滤波==》稳压。

m0_61973119的博客 8026

AutoHotkey 批量解压:让目录里的 ZIP 不再等你逐个右键

每周五下午,交付组把一批客户资料丢进下载目录,一个客户一个 ZIP,少说几十个。以前我逐个右键、点"解压到"、命名、等待,一轮下来一个多小时,鼠标都酸。这套动作毫无创造性,所以我写了个 ZIP 自动解压脚本,让 AutoHotkey 批量解压接手,我只负责看日志。 ## 方案全貌:ZIP 自动解压流水线的样子 ```text D:\Downloads\*.zip │ Loop, Fil

gitblog_00358的博客 334

STM32F407+OV2640的DCMI+DMA双缓冲JPEG图像采集系统

在嵌入式视觉系统中,数字摄像头接口(DCMI)是MCU连接CMOS图像传感器的关键硬件通道,其与DMA协同实现零CPU干预的高速数据流采集;而JPEG作为一种基于DCT变换与量化压缩的有损图像格式,依赖传感器端硬件编码引擎才能满足实时性要求。理解DCMI三重同步时序(PCLK/HSYNC/VSYNC)与DMA双缓冲机制的流水线协作原理,是突破带宽瓶颈、避免FIFO溢出和帧丢失的技术基础。该架构广泛应用于智能硬件、工业检测与边缘AI前端等需低功耗、高可靠图像捕获的场景,本文以OV2640与STM32F407为

weixin_42103128的博客 155

C++实现2D椭圆内部点网格生成:算法详解与工程实践

在计算机图形学与科学计算领域,区域离散化与空间采样是基础且关键的技术环节,其核心原理在于将连续几何区域转化为离散点集,以便进行数值分析、物理仿真或可视化渲染。通过边界框遍历与位置判断算法,可以高效地将椭圆这类二次曲线内部区域网格化,其技术价值在于为有限元分析、粒子系统初始化及游戏开发中的视野计算等应用场景提供了精确可控的离散数据基础。本文聚焦于2D椭圆内部点网格生成,深入剖析了利用椭圆标准不等式进行点筛选的算法实现,并提供了完整的C++源码,涵盖了参数验证、浮点精度处理及内存优化等工程实践细节,为图形算法与

weixin_34221112的博客 709

第14.10章 高翔博士最新开源框架Lightning-LM源码解读(十):在线定位run_loc_online涉及到的核心模块总结

本文对Lightning-LM激光SLAM定位框架进行了全面剖析。该框架是一个轻量高效的激光雷达建图与定位系统,支持3D SLAM、动态图层管理等功能。文章首先介绍了项目概况和源码结构,包括核心模块如定位系统(loc_system)、激光匹配(lidar_loc)和位姿图优化(pose_graph)等。接着详细解析了各模块的关键函数和运行流程,如数据接收处理、NDT匹配和位姿优化等。最后总结了学习该框架所需的C++知识要点,包括智能指针、多线程编程等现代C++特性。该分析为SLAM开发者提供了实用的架构参考

行知SLAM 799

车辆网络安全ISO/SAE 21434解读(一)概述

ISO/SAE 21434 《道路车辆 网络安全工程》是SAE和ISO共同制定的一项针对道路车辆的网络安全标准,它是一个面向汽车行业全供应链(OEM及各级供应商)的车辆网络安全管理指导文件

xiaoxiabang的博客 8420

回形取数算法:矩阵螺旋遍历的实现与应用

矩阵遍历是计算机科学中的基础操作,其中螺旋遍历(又称回形取数)是一种特殊的二维数组访问方式。该算法通过控制上下左右四个边界,按照顺时针方向依次访问矩阵元素,时间复杂度为O(m×n)。在图像处理领域,这种遍历方式可用于JPEG压缩中的zigzag扫描;在游戏开发中,则适用于战争迷雾等场景实现。边界法是解决此类问题的经典方法,通过动态调整遍历范围确保不重复访问。理解这种算法不仅能提升对二维数组的操作能力,也为学习更复杂的网格搜索算法奠定基础。本文以C++实现为例,详细解析了回形取数在OJ题目和实际工程中的应用技

weixin_34117211的博客 372

2026年软件测试职业院校技能大赛—ERP管理平台-采购入库模块Bug定位与查找

竞赛对接软件测试相关标准,以“ERP管理平台” 为被测系统,围绕软件测试领域的主流技术及工具,考查选手面 对实际问题的综合分析能力,对测试文档、测试用例的设计能力, 对单元测试、自动化测试、性能测试、接口测试等测试工具及方 法的掌握程度,检验选手团队协作能力、组织规划能力、方法运用能力等。

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 194

JUnit4测试报告SVG可视化实战:从监听器到动态仪表盘

在软件测试领域,测试报告是评估代码质量和追踪问题的核心依据。传统文本或HTML报告往往缺乏直观的可视化能力,难以快速呈现测试覆盖率和趋势分析。SVG(可缩放矢量图形)作为一种基于XML的矢量图形格式,因其由代码定义、可无损缩放和动态生成的特性,为测试报告的可视化提供了理想的技术方案。通过编程方式生成SVG图表,能够将枯燥的测试数据转化为包含通过率环形图、失败趋势线和耗时分布柱状图的综合仪表盘,极大提升了报告的信息密度和可读性。在工程实践中,结合JUnit4的RunListener监听器机制,可以实时捕获测试

weixin_33738578的博客 449

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

从数组到矩阵:掌握二维数据操作的核心思维与实战技巧

数组作为线性数据结构,是编程中处理序列化数据的基础。其核心在于通过索引对元素进行高效的增删改查。当数据需要表达二维空间关系时,矩阵(通常用二维数组实现)便成为关键模型,它引入了行、列的坐标语义,适用于图像处理、游戏地图、数据表格等场景。理解矩阵的坐标映射(i为行,j为列)与空间变换原理,是解决LeetCode算法题(如旋转图像、螺旋遍历)和开发实践(如贪吃蛇游戏逻辑)的技术基石。通过掌握遍历、旋转、翻转、搜索等模板化操作,开发者能构建健壮的代码,有效避免索引越界和浅拷贝等常见陷阱,从而提升在算法竞赛与工程项

weixin_30340617的博客 406

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

imageserver 架构设计原理:深入理解模块化图像处理

imageserver 是一个用 Go 语言开发的高性能图像处理工具包,它采用模块化架构设计,能够灵活处理各种图像格式和操作需求。本文将深入解析 imageserver 的架构设计原理,帮助开发者理解其内部工作机制和模块间的协作方式。 ## 整体架构概览:分层设计的图像处理引擎 imageserver 采用清晰的分层架构,将图像处理功能划分为多个独立模块,每个模块专注于特定的功能领域。这种设计

gitblog_01152的博客 418

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 长方形旋转计算最后的外层宽高,单元测试
萝卜芹菜芽
博客等级 码龄10年 27粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值