实现运动诱发失明(MIB)动画模型

这个炫酷的图表仍然来自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图表之道——如何制作专业有效的商务图表(典藏版)

作者:刘万祥

当当

矩阵算术

要在散点图上绘制线条,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

(0)

相关推荐