2011-08-26 108 views
1

在过去的一周,我试过三个点之间来计算角度 -
首先,我需要拿到积分=易
比来计算的角度(不是相对)=一件容易的事VBA计算角度相对于图表

,现在我需要得到相对于图形的角度 - 问题是我不知道如何(我确信这很容易)。

PI = 3.141592654
A(2004,227)
B(2005,18)
C(2006,25)

这里的功能/公式来计算角度>

arctan((Xb - Xa)/(Ya - Yb)) * (180/PI) + arctan((Xc - Xb)/(Yc - Yb)) * (180/PI) 

我需要在公式中添加什么,所以它会相对于图表? (我想解释太多,请)

以下是图表: enter image description here

非常感谢您!

+0

所以你只是想把角度放在图上?我是否正确地理解你? – Jon49

+0

我得到了角度,但数值是错误的,因为X Scale to Y Scale的比例是1到50. – Ron

+0

See?我[告诉你](http://stackoverflow.com/questions/7180478/vba-tan-return-wrong-value/7181701#7181701)你需要arctangent'Atn'而不是正切'Tan'!如果你有礼貌,你会赞成这个答案! http://stackoverflow.com/questions/7180478/vba-tan-return-wrong-value/7181701#7181701 –

回答

2

编辑:这是我的子代的完整代码来计算它。

Public Sub Question() 

Dim Pi As Double 
Pi = 3.141592654 
Dim myChart As ChartObject 

For Each myChart In ActiveSheet.ChartObjects 
    Dim xLength As Double 
    Dim yLength As Double 
    xLength = myChart.Chart.Axes(1).MaximumScale - myChart.Chart.Axes(1).MinimumScale 
    yLength = myChart.Chart.Axes(2).MaximumScale - myChart.Chart.Axes(2).MinimumScale 

    xLength = xLength/myChart.Chart.PlotArea.Width 
    yLength = yLength/myChart.Chart.PlotArea.Height 

    Dim goodScale As Double 
    goodScale = xLength/yLength 

    Dim v1x As Double 
    Dim v1y As Double 
    Dim v2x As Double 
    Dim v2y As Double 
    Dim Angle As Double 

    v1x = 2005 - 2004 
    v1y = 18 - 227 

    v2x = 2006 - 2005 
    v2y = 25 - 18 

    v1y = v1y * goodScale 
    v2y = v2y * goodScale 

    Angle = (Atn(v2x/v2y) - Atn(v1x/v1y)) * (180/Pi) 
Next 
End Sub 

你会注意到我对sub中的点进行了硬编码,但这只是为了拥有一个小的自足代码。

+0

问题是:我从图表本身的规模 - 你可以看到50,100,150,200,250,因此我决定,规模是1至50.我不知道这是否正确...我在其他Y规模(200)上的相同点和角度看起来相同,但如果我乘以200的价值是不同的.. 加上你需要多个X不是Y. – Ron

+0

哦,我明白了,我的不好。我会很快更新我的答案。 – Tipx

+0

根据您的计算,该配置为0 ... xlength = 2006 - 2004 = 2,ylength = 250-0 = 250,width = 667,height = 495 xlength = 2/667 = 1/333.5,ylength = 250/495 = 0.505>刻度=(1/333.5)/0.505=400/67367 ...... – Ron