LoginSignup
0
0

More than 1 year has passed since last update.

空間図形「21年 東京電機大 工・未来・理工・システム 1(3)」をsympyとFreeCADでやってみた。

Last updated at Posted at 2022-12-04

containsでした。sympyのsegmentのprojection?

オリジナル

上と同じです。大学入試数学問題集成>
未登録

sympyで(オリジナルのやり方)

勉強中

sympyで(projection)

containsでした。

from sympy import *
A=Point3D(1,3, 2)
B=Point3D(4,0,-1)
C=Point3D(4,3, 2)
s=Segment(A,B)
P=s.projection(C)
print("#"     ,P,s.contains(P))
print("# test",s.contains(Point(0,0,0)))
# Point3D(2, 2, 1) True
# test False

on line sympyで、上記のソースコードを貼り付けて実行できました。私の環境は,pycharmです。 

FreeCADのマクロで

マクロからsympyを使っています。
test行を削除しています。
CADで,線分AB上の点Pが確認できました。

an Isometric view:どの方向からみればわかりやすいのか、わかりませんでした。

png1.png

png2.png

import FreeCAD
import Part
import Draft
import Mesh
#########################################################################################################
from sympy import *
A=Point3D(1,3, 2)
B=Point3D(4,0,-1)
C=Point3D(4,3, 2)
s=Segment(A,B)
P=s.projection(C)
print("#"     ,P,s.contains(P))
#########################################################################################################
# 3D作図
def myXYZ2Txt(A):
    return '(' + str(A.x) + ',' + str(A.y) + ',' + str(A.z) + ')'
def myTxtXYZ(A,myWedgei):
    P5x=float(A.x)
    P5y=float(A.y)
    P5z=float(A.z)
    p5 = FreeCAD.Vector(P5x, P5y, P5z)
    myText = Draft.makeText(myWedgei, p5)
    myText.Label = myWedgei
    FreeCADGui.ActiveDocument.ActiveObject.FontSize = '0.2 mm'
def myTxtXYZ_S(*xy_tx):
    for i in range(1,int(len(xy_tx)/2)+1):
        myTxtXYZ(xy_tx[2*i-2],xy_tx[2*i-1]+myXYZ2Txt(xy_tx[2*i-2]) )
def myLine(A,B):
    Ax,Ay,Az=float(A.x),float(A.y),float(A.z)
    Bx,By,Bz=float(B.x),float(B.y),float(B.z)
    pl = FreeCAD.Placement()
    pl.Rotation.Q = (0.4247081540122249, 0.17592004639554645, 0.33985110062924484, 0.8204732460821097)
    pl.Base = FreeCAD.Vector(-3.9166066876399563, -2.1670824762243774, 1.7495260956243028)
    points = [FreeCAD.Vector(Ax,Ay,Az), FreeCAD.Vector(Bx,By,Bz)]
    line = Draft.make_wire(points, placement=pl, closed=False, face=True, support=None)
    Draft.autogroup(line)
myTxtXYZ_S(A,"A",B,"B",C,"C",P,"P")
myLine(A,B)
myLine(C,P)
doc = App.activeDocument()
App.ActiveDocument.addObject("App::Origin", "Origin")
App.ActiveDocument.getObject('Origin').Visibility = True
App.ActiveDocument.recompute()
Gui.activeDocument().activeView().viewAxonometric()
Gui.SendMsgToActiveView("ViewFit")
![png1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/ce62b674-02bc-1041-618e-a7a0f5f06aa5.png)
![png1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/12616266-97bf-4806-99ff-7c70263829bd.png)

参考

Is the other GeometryEntity contained within this Segment?<

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