wolframalphaで
SymPy Liveで
以下のソースコードを貼り付けて、Evaluateです。
例1
circumcircle
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.circumcircle)
mySubs={p1x:0 ,p1y:0 ,p2x:1 ,p2y:0 ,p3x:0 ,p3y:1}
print("#",t.circumcircle.subs(mySubs))
# (省略)
# Circle(Point2D(1/2, 1/2), sqrt(2)/2)
例2
辺の長さ a 3
辺の長さ b 4
辺の長さ c 5
外接円の半径 r 2.5
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.circumcircle.subs(mySubs))
# Circle(Point2D(3/2, 2), 5/2)
例3
単体ではうごきません。
def myTriangle_Move_CircumcenterToOrigin(dumABC):
dumO=dumABC.circumcircle.args[0]
return Triangle( dumABC.vertices[0]-dumO,
dumABC.vertices[1]-dumO,
dumABC.vertices[2]-dumO )
myT=myTriangle_Move_CircumcenterToOrigin(myT)
vbaソルバーで
エクセルのソルバーのダイアログ入力で普通にできますが、あえてVBAでチャレンジしてみました。ソルバーのための以下の参考の設定が必要です。
SolverOptions AssumeNonNeg:=False追加しました。
おすすめのサイトがあれば、教えて下さい。
参考
例1(距離)xy2変数
Const myMethod = "GRG Nonlinear"
'Const myMethod = "Simplex LP"
'Const myMethod = "Evolutionary"
Sub aaa_main()
ActiveSheet.Cells.Clear
MsgBox "3点を通る円を" & myMethod & "で計算します。"
Range("A1") = 0
Range("B1") = 0
Range("A2") = 1
Range("B2") = 0
Range("A3") = 0
Range("B3") = 1
Range("C1").Formula = "=(A1-$A$4)^2+(B1-$B$4)^2"
Range("C2").Formula = "=(A2-$A$4)^2+(B2-$B$4)^2"
Range("C3").Formula = "=(A3-$A$4)^2+(B3-$B$4)^2"
Range("C4").Formula = "=(C1-C2)^2+(C1-C3)^2"
Dim ws As Worksheet: Set ws = ActiveSheet
SolverReset
SolverOk setCell:=ws.Range("C4"), _
MaxMinVal:=3, _
ByChange:=ws.Range("A4:B4"), _
EngineDesc:=myMethod
SolverOptions AssumeNonNeg:=False
SolverSolve UserFinish:=True
Range("C5").Formula = "=sqrt(c1)"
End Sub
'結果
'"GRG Nonlinear" で 0.5,0.5,0.707106781
例1(ヘロンの公式)1変数
勉強中
例2(余弦定理)1変数
勉強中
例2(ヘロンの公式)1変数
勉強中