ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: aoe1981

[原创] 正式版发布:强大的旋转变换与对称变换自定义函数

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-3 23:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 aoe1981 于 2014-10-4 11:23 编辑

  合写函数示例及参数说明:

  
参数说明:=bianhuan($A$4:$D$6,90,2,ROW(A1),COLUMN(A1))
=bianhuan(目标数据区域,角度,变换类型,索引行标,索引列标)

  其中:目标数据区域无论正方形或是长方形,甚至是单个单元格;
     角度旋转支持90、180、270度,对称支持45、90、135、180度;
     变换类型参数1为旋转,2为对称;
     索引行标,索引列标用于单值输出时从结果数组中索引对应值;
     3、4、5参数可省略,缺省值为变换类型:1,索引行标:0,索引列标:0。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-3 23:15 | 显示全部楼层
  实践证明:TRANSPOSE()函数相当于以135度轴做对称变换,如图:
   123.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-3 23:19 | 显示全部楼层
编写该两个自定义函数的过程中,最大的困惑在于:
原来工作表相当于直角坐标系的第四象限,因而在许多方面总是与直观演示附件不一致,导致很长时间想不通,却原来结果是如此简单!!!
直观演示附件在以下链接下载,前楼好像也有该附件链接,对我而言,其发挥了举足轻重的作用,故而再次发链接:
http://club.excelhome.net/forum. ... 867&pid=7878843

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-3 23:23 | 显示全部楼层
本帖最后由 aoe1981 于 2014-10-4 11:26 编辑

最后,有必要再备注一句,最近发的许多帖,在逻辑上都是相关的,当然和前段的“八卦”、“函数”、“休闲”……无关。
这些帖无一都和香川大侠的“8皇后问题”密切相关,是我在研究“8皇后问题”过程中的有用的副产品,记录下来……
呵呵……

TA的精华主题

TA的得分主题

发表于 2014-10-3 23:33 | 显示全部楼层
好厉害!慢慢学习!楼主辛苦!

点评

多谢您的鼓励,疲惫顿消啊……  发表于 2014-10-3 23:38

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-3 23:37 | 显示全部楼层
本帖最后由 aoe1981 于 2014-10-4 11:26 编辑

  下段代码需着重强调并说明,也是为了防止比如我在以后看不懂的缘故:

  1. If n = 1 Then
  2.     If jd = 90 Then jd = 270 Else If jd = 270 Then jd = 90 '工作表其实是第四象限,相当于转为第一象限
  3. ElseIf n = 2 Then
  4.     If jd = 45 Then jd = 135 Else If jd = 135 Then jd = 45 '工作表其实是第四象限,相当于转为第一象限
  5. End If
复制代码
  n=1是为旋转,n=2时为对称。
  如果不加该段代码,则旋转变换的顺序为顺时针的,与直角坐标系中的变换演示刚好相反!
  而对称变换中45度对称轴被180对称为相当于135度对称轴,反之,135度对称轴被180度对称为相当于45度对称轴。




  关于概念:平移、旋转无甚异义,倒是“对称”,许多地方叫“反射”,也有许多地方叫“镜像”,可能后两者较形象的缘故吧……这是三大变换,现在的小学数学教材中也是这样渗透的……

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-3 23:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
8楼附件中我是以行3列4的长方形区域为测试对象的,对正方形区域测试较少,应当没有问题,大家可多多审查……
也可进行更大的区域……

我的附件目标区域如下:
1        a        b        c
2        h        i        d
3        g        f        e

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-3 23:45 | 显示全部楼层
本自定义函数中最核心的代码之一是:
  1. hl = WorksheetFunction.Max(h, l)
  2. ReDim brr(-hl To hl, -hl To hl) '过渡数组
复制代码
数组brr界定了旋转、对称变换可施展的最大平面范围,如此便保证了施行变换后,不会越界,从而保证不会产生数组下标越界的错误!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-3 23:48 | 显示全部楼层
另外一段核心代码是:
  1.         If n = 1 Then
  2.             x = j * Cos(hd) - i * Sin(hd)
  3.             y = j * Sin(hd) + i * Cos(hd)
  4.             brr(y, x) = arr(i, j)
  5.         ElseIf n = 2 Then
  6.             x = j * Cos(hd * 2) + i * Sin(hd * 2)
  7.             y = j * Sin(hd * 2) - i * Cos(hd * 2)
  8.             brr(y, x) = arr(i, j)
  9.         End If
复制代码
即应用了旋转矩阵、对称矩阵的核心变换算法部分,此部分知识可查阅相关数学知识。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-4 00:11 | 显示全部楼层
本帖最后由 aoe1981 于 2014-10-4 00:14 编辑

  也模仿香川下帖:
  http://club.excelhome.net/forum. ... 1146010&pid=7816373
  做了一个示例:
   123.jpg
  该示例附件在8楼,已更新:
  http://club.excelhome.net/forum. ... 193&pid=7878947

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-29 05:14 , Processed in 0.037283 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表