wolframalphaで
SymPy Liveで
以下のソースコードを貼り付けて、Evaluateです。
例1
inradius
from sympy import *
var('p1x p1y p2x p2y p3x p3y')
p1, p2, p3 = Point(p1x,p1y), Point(p2x,p2y), Point(p3x,p3y)
t = Triangle(p1, p2, p3)
print("#",t.incenter)
print("#",t.inradius)
mySubs={p1x:0 ,p1y:0 ,p2x:4 ,p2y:0 ,p3x:0 ,p3y:3}
print("#",t.incenter.subs(mySubs))
print("#",t.inradius.subs(mySubs))
# (省略)
# Point2D(1, 1)
# 1
例2
辺の長さ a 3
辺の長さ b 4
辺の長さ c 5
内接円の半径 r 1
from sympy import *
var('a b c x p1x p1y p2x p2y p3x p3y')
p1x=0.0
p1y=0.0
p2x=a
p2y=0.0
p3x=solve((b**2-x**2)-(c**2-(a-x)**2),x)[0]
p3y=sqrt(b**2-p3x**2)
p1,p2,p3 = Point(p1x,p1y), Point(p2x,p2y), Point(p3x,p3y)
t = Triangle(p1, p2, p3)
mySubs={a:3,b:4,c:5}
print("#",t.incenter.subs(mySubs))
print("#",t.inradius.subs(mySubs))
# Point2D(1, 1)
# 1
VBAソルバーで
エクセルのソルバーのダイアログ入力で普通にできますが、あえてVBAでチャレンジしてみました。ソルバーのための以下の参考の設定が必要です。
SolverOptions AssumeNonNeg:=False追加しました。
おすすめのサイトがあれば、教えて下さい。
参考
例1
例2(ヘロンの公式で)1変数
Const myMethod = "GRG Nonlinear"
'Const myMethod = "Simplex LP"
'Const myMethod = "Evolutionary"
Sub gaisetu_heron()
ActiveSheet.Cells.Clear
MsgBox "内接円の半径を" & myMethod & "で計算します。"
Range("A1") = 3
Range("A2") = 4
Range("A3") = 5
Range("A6").Formula = "=(A1+A2+A3)/2"
Range("B6").Formula = "=A6*(A6-A1)*(A6-A2)*(A6-A3)-(A1*A$4/2+A2*A$4/2+A3*A$4/2)^2"
Dim ws As Worksheet: Set ws = ActiveSheet
SolverReset
SolverOk setCell:=ws.Range("B6"), _
MaxMinVal:=3, _
ByChange:=ws.Range("A4"), _
EngineDesc:=myMethod
SolverSolve UserFinish:=True
End Sub
'結果
'半径1