AutoHotKey脚本:给定三角形三边边长计算三角形面积

今天写了一个AutoHotKey脚本,功能是在鼠标选中一段格式为“[数字,数字,数字]”的文字后,按下热键“Alt+Shift+T”,脚本自动根据海伦公式(Heron's formula)计算以这三个数字为边长的三角形面积。

我的操作系统版本为Win7,AutoHotKey版本为1.1.23.05。

脚本效果如下:

AutoHotKey脚本:给定三角形三边边长计算三角形面积_第1张图片

然后晒下代码 getTrisArea.ahk :-)

; 已知三角形三边,使用海伦公式求解三角形面积
;   三角形三边以格式 [side1, side2, side3] 给出,必须为正整数
; Tsybius2014 2016/04/26

!+t::
    ; 保存剪贴板中的内容到变量中
    cborad=%ClipBoard%
    Send,^c
    ClipWait,1
    input=%ClipBoard%
    ; 逻辑调用开始
    ; 1、去除回车符、换行符、空格符、制表符
    input:=Trim(input)
    StringReplace,input,input,`r,,All
    StringReplace,input,input,`n,,All
    StringReplace,input,input,%A_SPACE%,,All
    StringReplace,input,input,%A_TAB%,,All
    ; 2、使用正则表达式判断输入是否符合规范
    isLegal=0
    isLegal:=RegExMatch(input,"^\[[0-9]+,[0-9]+,[0-9]+\]$")
    IfEqual,isLegal,0,return
    ; 3、获取三条边的边长
    input:=SubStr(input,2,StrLen(input)-2) ; 去除左右的方括号
    StringSplit,sides,input,`,
    a=%sides1%
    b=%sides2%
    c=%sides3%
    ab=0
    ab:=a+b
    ac=0
    ac:=a+c
    bc=0
    bc:=b+c
    ;Msgbox,%a% %b% %c% %ab% %ac% %bc%
    tmp=0
    If(a>=bc){
      tmp:=1
    } Else If(b>=ac){ 
      tmp:=1
    } Else If(c>=ab){
      tmp:=1
    }
    IfEqual,tmp,1,return
    ; 4、使用海伦公式计算三角形面积
    area=0
    area:=GetArea(a,b,c)
    ; 5、输出结果
    msgbox,0,本窗口5s后自动关闭,%area%,5
    ; 逻辑调用结束
    ; 回复脚本执行前剪贴板的内容
    ClipBoard:=cborad
return

; 函数:给定三边长度,根据海伦公式计算三角形面积
GetArea(a, b, c)
{
    p=0
    p:=(a+b+c)/2.0
    area=0
    area:=sqrt(p*(p-a)*(p-b)*(p-c))
    return area
}

总结下一些踩到的坑:

1、我没有找到AHK(即AutoHotKey,后同)中获取当前鼠标选中文本的函数,所以采用了变通的方式,即先将剪贴板中的内容保存到一个变量中,再将鼠标选中的文本保存到剪贴板中,用AHK获取剪贴板中的内容并处理,处理完毕后再将存储到变量中的原剪贴板内容恢复。

2、AHK使用的正则表达式支持PCRE,即Perl语言的正则表达式规则。

3、AHK的数组下标也是从1开始的,因而SubStr函数的参数也受其影响。

4、AHK的MsgBox有一个参数叫Timeout,这个设计不得不说很赞!

5、写脚本语言应比写高级语言的代码要谨慎,脚本语言的解释器有时候是不讲道理的。

END

你可能感兴趣的:(autohotkey,三角形面积,海伦公式,三边)