目前更新了Calc函数用于计算,更新了Equation函数用于求解方程/方程组
***注意:一定要联网!这是在线运算!
***一些说明:如果结果显示为空白,则可以将TransAns函数中MaxIndex的默认值调高一些,若仍无法解决,则是目前暂时未解决的问题。
; Author: Mono
; Time: 2022.08.10
; Online Math Solver
; Version: 0.0.1
Class Solver
{
Static Calc(Formula, Trans := "")
{
Url := "https://mathsolver.microsoft.com/zh/solve-problem/"
Url .= Formula
if Trans = "Run"
{
Run Url
Return
}
Return TransAns(Network_Work(Url), , "Calc")
}
Static Equation(Formula, Trans := True)
{
Url := "https://mathsolver.microsoft.com/zh/solve-problem/"
Formula := StrReplace(Formula, ",", ",")
Url .= Formula
if Trans = "Run"
{
Run Url
Return
}
Return TransAns(Network_Work(Url), , Trans)
}
}
Network_Work(Url, Mode := "GET", Body := "")
{
if Mode != "GET" || Mode != "POST"
Mode := "GET"
Whr := ComObject("WinHttp.WinHttpRequest.5.1")
Whr.Open(Mode, Url, True)
Whr.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36")
Whr.SetRequestHeader("Accept", "text/html,application/xhtml xml,application/xml;q=0.9,Img/avif,Img/webp,Img/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
Whr.SetRequestHeader("Referer", Url)
Whr.Send(Body)
Whr.WaitForResponse()
Return Whr.ResponseText
}
TexDownload(Arr, Filename)
{
Lst_Filename := StrSplit(Filename, ".")
Filename := SubStr(Filename, 1, StrLen(Filename) - StrLen(Lst_Filename[-1]) - 1)
For i in Arr
Download i, (Filename "_" A_Index "." Lst_Filename[-1])
Return True
}
TexUrl(Text)
{
Url := "https://latex.codecogs.com/png.image?"
Lst_Url := []
Lst_Text := StrSplit(Text, "`n")
For i in Lst_Text
Lst_Url.Push(Url i)
Return Lst_Url
}
TransAns(Text, MaxIndex := 300, Trans := True)
{
ans := ""
Text := StrReplace(Text, '<div class="hidden">', "#MST#")
Text := StrReplace(Text, '<div class="answer">', "#MST#")
Lst_Text := StrSplit(Text, "#MST#")
if Trans == "Calc"
{
For i in Lst_Text
{
i := Trim(i)
flag1 := SubStr(i, 1, StrLen("<!-- -->")) == "<!-- -->"
flag2 := SubStr(i, -StrLen("</div>")) == "</div>"
if flag1 && flag2
{
i := StrReplace(i, "<!-- -->")
i := StrReplace(i, "</div>")
Return i
}
}
}
For i in Lst_Text
{
i := Trim(i)
flag1 := SubStr(i, 1, StrLen("<!-- -->")) == "<!-- -->"
flag2 := SubStr(i, -StrLen("</div>")) == "</div>"
flag3 := StrLen(i) < MaxIndex
if flag1 && flag2 && flag3
{
i := StrReplace(i, "<!-- -->")
i := StrReplace(i, "</div>")
tmp := StrSplit(i, "=")
if Trans == "Ans"
{
if InStr(i, "\approx")
{
j := StrSplit(i, "\approx")
ans .= tmp[1] "≈"
ans .= Trim(j[-1])
}
else
{
ans .= tmp[1] "="
ans .= tmp[-1]
}
ans .= "="
}
else if Trans
{
For j in tmp
ans .= TransTex(Trim(j)) "="
}
else
ans .= i "="
ans := SubStr(ans, 1, StrLen(ans) - 1)
ans .= "`n"
}
}
Return SubStr(ans, 1, StrLen(ans) - 1)
}
TransTex(Text)
{
ans := ""
if InStr(Text, "\approx")
{
Text := StrReplace(Text, "\approx ", "≈")
Text := StrReplace(Text, "\approx", "≈")
}
if InStr(Text, "\sqrt")
{
Text := StrReplace(Text, "\sqrt", "√")
}
if InStr(Text, "\frac")
{
Text := StrReplace(Text, "{")
Lst_Text := StrSplit(Text, "\frac")
if Lst_Text[1]
{
if Lst_Text[1] !== "-"
ans .= Lst_Text[1] "|"
else
ans .= "-"
}
tmp := StrSplit(Lst_Text[2], "}")
For i in tmp
{
if A_Index < tmp.Length - 1
ans .= i "/"
else if i
ans .= i
}
ans := SubStr(ans, 1, StrLen(ans))
}
else
ans := Text
Return ans
}
; 使用方法
msgbox Solver.Calc("12165165*84684684")
; 第二个参数若为Run,则表示在网页中打开微软数学求解该公式界面
msgbox Solver.Calc("12165165*84684684", "Run")
msgbox Solver.Equation("x+2=0")
msgbox Solver.Equaltion("x+2y=18,3x-4y=20")
; 第二个参数若为0,则表示返回值为katex格式,这个参数用于无法正常返回值时使用
msgbox Solver.Equation("x+2=0", 0)
; 第二个参数若为Run,则表示在网页中打开微软数学求解该公式界面
Solver.Equation("x^3-4x^2+x=-3", "Run")
; 第二个参数若为Ans,则只返回最终值
msgbox Solver.Equation("x^3-4x^2+x=-3", "Ans")
; 新的内容在线Tex转图
; TexUrl函数用于返回图片网址
Arr := TexUrl(Solver.Equation("x^3-4x=20", 0))
; TexDownload函数用于下载图片文件名自动加上_1、_2等后缀
TexDownload(Arr, "1.png")
复杂运算能不能搞定?
可以,但格式上我没去优化,只能用tex格式显示 这个其实就是微软的math solver
你打开这个网站就知道了https://mathsolver.microsoft.com/zh/solve-problem/
?逛着逛着突然脑洞大开,各路大神给了我很多思路