专栏首页完美Excel不可思议的Excel图表11: 实现运动诱发失明(MIB)动画模型

不可思议的Excel图表11: 实现运动诱发失明(MIB)动画模型

学习Excel技术,关注微信公众号:

excelperfect

这个炫酷的图表仍然来自excelhero.com。正如之前提到过的,通过学习研究复杂的图表制作,无论是否能够完全明白,都会很好地提高我们的Excel绘图能力。

下面是一组旋转的蓝色十字架和3个黄点。现在,注意中心(观看闪烁的红色/绿色斑点)。注意,黄色斑点偶尔消失:单独、成对或同时全部三个,是不是?

现实中,3个黄点不断出现,这被称为“运动诱发失明”或MIB。

图1

实际的MIB Excel模型比这个动画的GIF表示更平滑。

MIB模型

这里有三种用于这种视错觉的方法。

1.使用单个系列定义所有点(49个)并在每个点上放置一个十字。

图2

2.使用2系列来定义每个十字架,有49个十字架。

图3

3.使用包括十字架并旋转的位图作为背景。

第一种方法不适合视觉的需要,因为每个标记不会随着系列的旋转而旋转,而是相对于序数轴保持固定。

第二种方法为每个十字交叉准备大量坐标,即每个十字交叉的4个X和4个Y坐标,有49个交叉,总共98个系列和196个坐标。虽耗费时间,但至少十字架会旋转。这是示例模型选择的方法。

图4

第三种方法旋转固定位图虽然非常可行,但我们是要在Excel图表中来完成这所有的工作。最后的附件中有真实模型和所有相关的准备工作,你可以下载研究。下面介绍的所有准备工作都在附件工作表“2”上。

设置

首先,我在X和Y中设置一个数字-3到+3的表格,然后在每个表格中增加/减少一个小的数来表示十字的宽度。这里使用的是0.15。

下表是每个点的X和Y值。

图5

使用X和Y值的问题是围绕点旋转它们,使用极坐标会更容易,但Excel需要笛卡尔坐标绘图。于是,处理过程如下:

1.设置49个点的4组X、Y

2.将它们转换为极坐标

3.对每个端点设置命名公式

4.对修正的极坐标添加径向增量

5.使用命名公式转换极坐标为笛卡尔坐标

6.绘图

7.从第4步重复

极坐标

上述处理过程中第2步意味着将每组坐标转换为由半径r和角度Ø组成的极坐标。

图6

通过下式解决:

图7

对每个十字的每个端点,98对XY坐标进行处理。

现在,有了端点的极坐标,可以设置旋转方程。

这是将原始极坐标转换回X和Y值的公式,Excel需要绘制这些值。

图8

现在,可以添加一个旋转角度,这里使用t。这样,旋转后的新位置就是:

图9

为所有十字交叉的十字的每个点都这样处理:

图10

矩阵算术

要在散点图上绘制线条,Excel需要在单元格区域或数组中的2个X值,以及同样的2个Y值。可以在一个命名公式中一起添加2个命名公式来创建数组,这样最终得到一个数组,代表49个十字交叉的98段中每一段的X和Y值。

X值 = {X1,X2}

Y值 = {Y1,Y2}

所使用的其中一个命名公式为:

图11

为了简化所有这些的构建,坐标、转换到极坐标和构造旋转变换公式都是在Excel中完成的(参见示例文件中的工作表“2”)。

下面是实现这些命名公式的VBA代码:

Sub Load_Named_Ranges()
  Dim c As Range
  For Each c In Selection
    ActiveWorkbook.Names.Add Name:=c.Text,RefersTo:=c.Offset(, 1).Text
  Next
End Sub

添加图表系列

一旦构造并装载了命名公式,就只需在Excel中添加空白散点图并设置系列名称、X值和Y值的表:

图12

使用VBA代码将这些系列添加到图表中。

Sub Add_Cht_Series()
  Dim sNumb As Integer
  Dim c As Range
 Worksheets("1").ChartObjects("Chart 1").Activate
  For Each c InWorksheets("1").Range("AQ3:AQ100")
    sNumb = ActiveChart.SeriesCollection.Count+ 1
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(sNumb).Name =c.Text
    ActiveChart.SeriesCollection(sNumb).XValues= c.Offset(, 1).Text
    ActiveChart.SeriesCollection(sNumb).Values =c.Offset(, 2).Text
  Next
End Sub

3个黄点

使用下列坐标在图表中手动添加3个黄点:

X系列:={1.5,0,-1.5}

Y系列:={1.5,-1.8,1.5}

将标记设置为黄色,大小为15,线型设置为无。

中心点

中心点是图表中手动添加的系列:

X值:=0

Y值:=0

将标记设置为红色,大小为12,线型设置为无。

动画

添加简单的命名公式“t”,更改t的值并更新图表来实现图表的动画。

Sub Rotate()
  Dim t As Double
  t = 361 '在361度开始
  Do While [AA1] '单元格AA1是True时循环
    t = t - 1 '旋转角度减小1度
    If t = 0 Then t = 360 '如果旋转角为0则回到360
    '添加命名公式=t * 2 * Pi / 360
    't以弧度表示
    ActiveWorkbook.Names.Add Name:="t",RefersToR1C1:=(t * 2 * Pi / 360)
    '刷新屏幕
    DoEvents
    '如果t在指定范围内则设置中心标记颜色为红色或绿色
    If (t >= 0 And t < 90) Or (t >=180 And t < 270) Then
      ActiveSheet.ChartObjects("Chart1").Chart.SeriesCollection(99).Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
    Else
      ActiveSheet.ChartObjects("Chart1").Chart.SeriesCollection(99).Format.Fill.ForeColor.RGB = RGB(0, 255, 0)
    End If
    'DoEvents
  Loop
End Sub

如果有兴趣深入研究本文介绍的图表是如何实现的,可以在完美Excel公众号中发送消息:

MIB动画图

下载示例工作簿。

或者到原作者的网站:

http://www.excelhero.com/blog/2012/02/motion-induced-blindness.html

本文分享自微信公众号 - 完美Excel(excelperfect)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 归纳决策树ID3(信息熵的计算和计算原理写的很清楚)

    先上问题吧,我们统计了14天的气象数据(指标包括outlook,temperature,humidity,windy),并已知这些天气是否打球(play)。如果...

    用户5745385
  • 说唱有嘻哈 算法有哈希

    讲完了List之后,我们继续讲集合中的另外两大巨头,Map和Set。在讲解这两个巨头之前,很有必要来了解一下哈希算法,因为Map和Set的无脑实现类就是Hash...

    用户5745563
  • Python—字符串常用的格式化方法

    其实如果要通读字符串的所有方法,只需要在pycharm中输入st.就会自动弹出字符串的方法列表,挨个试过去就知道了

    Ed_Frey
  • 抽象画你是没希望了 抽象类你还可以抢救一下

    抽象一词的本义是指人在认识思维活动中对事物表象因素的舍弃和对本质因素的抽取。说人话就是删除看的懂得,留下看不懂的。

    用户5745563
  • LabelEncoder(标签编码)与One—Hot(独热编码)

    在做Kaggle项目的时候,碰到的问题,通常拿到一个比赛项目,将特征分为数字型特征和文字性特征,分别进行处理,而对于文字型特征如何处理,这时就...

    用户5745385
  • KNN(k-nearest neighbor的缩写)原理及使用

    如果一个实例在特征空间中的K个最相似(即特征空间中最近邻)的实例中的大多数属于某一个类别,则该实例也属于这个类别。所选择的邻居都是已经正确分类的实例

    用户5745385
  • 分类模型的评价指标(三)

    假设我现在有一个二分类任务,是分析100封邮件是否是垃圾邮件,其中不是垃圾邮件有65封,是垃圾邮件有35封.模型最终给邮件的结论只有两个:是垃圾邮件与 不是垃圾...

    用户5745385
  • Python处理图片九宫格,炫酷朋友圈

    在日常的生活中,大家偶尔会看到朋友圈发的照片由一张被切成九张的效果,有时由一张照片被切成九张照片所带来的视觉盛宴是不一样的!

    用户2769421
  • 集合中的线程初体验

    本章继续讲集合,先来看看Set集合。Set集合的特点,1:无序,2:无重复。上一章讲了HashMap,最后提到HashSet的底层实现其实就是HashMap。那...

    用户5745563
  • Java基础(二)基本语法

    一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。

    一觉睡到小时候

扫码关注云+社区

领取腾讯云代金券