ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 程序开发] [第110期] 将在散点图范围内的自由曲线转化为散点图[已开贴评分]

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-17 09:26 | 显示全部楼层 |阅读模式
本帖最后由 delete_007 于 2015-2-4 14:28 编辑

题目内容:

如上图动画演示的,将在散点图范围内的自由曲线转化为散点图的数据,使得这些曲线完整、重合的显示在散点图内。

答题要求:
请下载附件,并添加代码完成题目,再麻烦传附件上来,Excel 文件最好是2003格式的,文件名请改为如下格式:Lee1892_转化自由曲线至散点图.xls


评分规则:
1、比例一致,仅有少许平移偏差,1分
2、如动画能够基本重合的,加1分
3、严格重合,加1分

提示:
这题比较简单哈,熟悉图表操作、文件内形状信息获得、定位之类的。

是否参与评论:
可以参与

参考答案:
另加~


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

点评

这个不简单吧?是三次样条插入吗?  发表于 2014-11-24 20:48
竞赛日期:2014-11-17至2014-12-20  发表于 2014-11-17 09:31

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-11-19 11:29 | 显示全部楼层
本帖最后由 qy1219no2 于 2014-11-24 15:49 编辑

楼主没有说清楚,如果Chart移动位置后,所画出的图形与形状是否仍然保持重合。
我的附件是:在形状图形不动的情况下,不管怎样移动Chart,或者改变Chart大小,所画出的图形均与形状保持重合。
不知道是否符合题意?

看来2003和2007还是有一些差距,当时没有考虑版本的问题,另外,通过2003也发现原来的计算还是存在一个漏洞,即没有考虑绘图区与图表区的边界因素(及PlotArea.Left/Top)
并且,也发现,在没有坐标轴的情况下,绘图区的最上(Top)和最左(Left)可以达到-4磅,这些都在此次附件中予以修正,请测试。
楼主,最新附件已修改为2003版合法代码,11月24日晚16:00上传,请重新下载,谢谢!










本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

点评

截个图吧,我这2003看到的是偏的  发表于 2014-11-20 13:05
1、附件名用你自己的ID;2、能否先删一下附件,Delete转过来后没有锁贴  发表于 2014-11-19 13:04
1、加个Chart的事件,删掉数据重来一次就能解决。2、既然Chart能移动,画的自由曲线不也可以移动吗?  发表于 2014-11-19 11:32

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-11-19 13:01 | 显示全部楼层
Delete没有锁贴?

~~
我还没下过,目前为止有2个人下过2楼附件了

点评

您和楼主是兄弟吗?呵呵……好名字,好ID……  发表于 2014-12-23 19:15

TA的精华主题

TA的得分主题

发表于 2014-11-19 21:24 | 显示全部楼层
本帖最后由 aoe1981 于 2014-11-20 15:09 编辑

  大侠,这是我做的,您审阅:
  图如下:

  代码如下:
  1. Option Explicit

  2. Private Sub cmdClear_Click()
  3. Range("a2:b" & Rows.Count) = ""
  4. End Sub

  5. Private Sub cmdDrawCurve_Click()
  6. Dim shp As Shape, i&, m&, n&, zbx#, zby#, zb()
  7. m = 0
  8. With Sheet1.Shapes("Chart 1").Chart
  9.     .Axes(xlCategory).MinimumScale = 0
  10.     .Axes(xlValue).MinimumScale = 0
  11.     .Axes(xlValue).ReversePlotOrder = True
  12.     .Axes(xlCategory).MaximumScale = .PlotArea.Width
  13.     .Axes(xlValue).MaximumScale = .PlotArea.Height
  14.     zbx = .PlotArea.Left + Sheet1.Shapes("Chart 1").Left + 3
  15.     zby = .PlotArea.Top + Sheet1.Shapes("Chart 1").Top + 3
  16. End With
  17. For Each shp In Sheet1.Shapes
  18.     If shp.Type = msoFreeform Then
  19.         n = shp.Nodes.Count
  20.         ReDim Preserve zb(1 To 2, 1 To n + m)
  21.         For i = 1 To n
  22.             zb(1, i + m) = shp.Nodes(i).Points(1, 1) - zbx
  23.             zb(2, i + m) = shp.Nodes(i).Points(1, 2) - zby
  24.         Next i
  25.         m = m + n + 1
  26.     End If
  27. Next shp
  28. Range("a2").Resize(m - 1, 2) = WorksheetFunction.Transpose(zb)
  29. End Sub
复制代码
  附件如下:
  
  我的文件格式是2003,但是在2010中编辑,在2003中运行效果目前未测试,2010中正常。


  在2003中录制、测试了半天,传一个2003版的:
  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2014-11-25 15:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
比葫芦画瓢做一个,呵呵

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-11-25 16:16 | 显示全部楼层
本帖最后由 wcymiss 于 2014-11-25 16:38 编辑

不晓得能符合题意不:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

点评

API都用上了?不用这么麻烦的。  发表于 2014-11-26 13:18

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-11-25 18:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
增加了捕捉直线的功能,参数 NumberOfPoints 可调

效果如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-26 13:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lee1892 于 2014-11-27 09:25 编辑

此题参考答案:

效果如下:


题目本意是要测试如下知识点:
1)Chart 对象的属性的了解,包括Chart对象中的PlotArea对象的属性值
2)Shapes对象的属性的了解,主要是 Type 为 msoFreeform 的自由曲线 的 Vertices 属性 及其 含义
3)表中对象的定位与散点图坐标的换算
4)贝塞尔三次样条曲线插值计算方法

题目的做法:

1、由自由曲线的 Vertices 属性的帮助文件 可以了解到:该属性返回一组坐标对,表示了图形对象的顶点(以及贝塞尔曲线的控制点)的坐标。实际上,对于自由曲线,该组坐标的点为曲线顶点和两个顶点间的三次贝塞尔曲线的两个控制点。所以,实际顶点的数量为 (N - 1) / 3 + 1 个,N 为坐标对数量。间隔其中的为贝塞尔曲线控制点。

2、ChartObject -> Chart -> PlotArea ,这一组对象的左上角定位决定了散点图显示范围的左上角在表中的定位,而 PlotArea 的高和宽与散点图的横纵坐标的最大最小值决定了表中定位单位与散点图坐标单位的比例。此题鼓励采用单位比例换算,而不是直接修改散点图的坐标最大最小值,是因为考虑到在实际应用中散点图会有其它数据显示。另外需要注意的是对于 PlotArea 对象,需要使用 InsideTop、InsideLeft、InsideHeight、InsideWidth 这一系列属性,以排除坐标轴的干扰。

3、对经过单位换算的实际顶点进行三次贝塞尔插值计算,插值点数量在5~8个就可以使得散点图中的曲线很好的符合自由曲线了。

附件中的三次贝塞尔插值计算的代码参考的是 中文Wiki

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2014-11-28 13:50 | 显示全部楼层
本帖最后由 lsdongjh 于 2014-11-29 19:27 编辑

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

点评

请按题目要求更改文件名,用你自己的ID  发表于 2014-11-29 09:03

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-12-7 10:47 | 显示全部楼层
本帖最后由 alzbz 于 2014-12-8 09:53 编辑

有意思。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-21 18:38 , Processed in 0.047236 second(s), 20 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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