LoginSignup
0
0

More than 1 year has passed since last update.

三角形の内接円をwolframとsympyとソルバーでやってみた。

Last updated at Posted at 2021-09-25

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 
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0