CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

タートルグラフィックスライブラリーを使ってリンゴの立体画像を描かせてみたらwww

2023-03-22 21:43:58 | python

import turtle

# タートルオブジェクトの作成
t = turtle.Turtle()

# ペンを上げる関数
def lift_pen():
    t.penup()

# ペンを下げる関数
def lower_pen():
    t.pendown()

# リンゴの上部を描画する関数
def draw_top():
    lower_pen()
    t.color("red")
    t.begin_fill()
    t.circle(30, 180)
    t.end_fill()
    lift_pen()

# リンゴの下部を描画する関数
def draw_bottom():
    lower_pen()
    t.color("green")
    t.begin_fill()
    t.circle(-30, 180)
    t.end_fill()
    lift_pen()

# リンゴの輪郭を描画する関数
def draw_outline():
    lower_pen()
    t.color("brown")
    t.width(10)
    t.circle(40, 180)
    t.left(90)
    t.forward(80)
    lift_pen()

# 3D効果を追加する関数
def draw_3d():
    lower_pen()
    t.color("lightgray")
    t.width(5)
    t.left(90)
    t.forward(10)
    t.right(90)
    t.circle(-40, 180)
    t.left(90)
    t.forward(10)
    lift_pen()

# リンゴを描画する関数
def draw_apple():
    draw_top()
    draw_bottom()
    draw_outline()
    draw_3d()

# リンゴを描画
draw_apple()

# 描画ウィンドウを閉じる
turtle.done()

 

おい!!!なんだよこれは???

なめとんのか???


タートルグラフィックスを使って球面を描く

2023-03-22 20:15:59 | python
タートルグラフィックスはいろいろな2Dグラフィックスを描けることが分かった。
では3Dの立体描画はどうだろうと思ってChatGPTにソースコードを書かせてみた。

Pythonのタートルグラフィックスライブラリーを使って球面を描かせるプログラムを書いて。

以下はPythonのタートルグラフィックスライブラリーを使用して球面を描くプログラムの例です。

import turtle import math # 半径と分割数を指定 radius = 100 num_divisions = 36 # タートルを作成 t = turtle.Turtle() # 球面を描画する関数を定義 def draw_sphere(): # 経度と緯度のループを回す for i in range(num_divisions): for j in range(num_divisions): # 緯度と経度の角度を計算 lat = math.pi * (i / num_divisions - 0.5) lon = 2 * math.pi * (j / num_divisions) # 球面上の座標を計算 x = radius * math.cos(lat) * math.cos(lon) y = radius * math.cos(lat) * math.sin(lon) z = radius * math.sin(lat) # 座標に移動 t.penup() t.goto(x, y) # 球面上の点を描画 t.pendown() t.dot(2) # 終了処理 t.hideturtle() turtle.done() # 球面を描画 draw_sphere()

このプログラムでは、半径と分割数を指定して、球面上の点を描画しています。経度と緯度のループを回して、緯度と経度の角度を計算し、球面上の座標を計算しています。計算された座標にタートルを移動して、球面上の点を描画しています。最後に、タートルを非表示にして、プログラムを終了しています。

Pydroidで実行してみたら、亀がグリグリ回ってそれらしき動きをしていたものの、一向に立体が描画されないみたいなので、途中で切った。
パソコンではどうだろうか?

全然立体的じゃない。
しかもメッチャ遅い。


CATIAを使って手描きで曲線を描く方法と描いた曲線を平滑化する自動化VBSプログラム

2023-03-22 15:51:01 | CATIA

【Question】CATIAを使って手描きで曲線を描く方法と描いた曲線を平滑化する手法は?


CATIAでは、手描きで曲線を描くことができます。具体的な手順は以下の通りです。

3Dスケッチャーを開き、作成したい平面を選択します。
スケッチャーのツールバーから「手描き曲線」を選択します。
マウスで曲線を描きます。

描画する際には、ベジェ曲線や曲率半径を調整するための制御点を追加することができます。
曲線が完成したら、右クリックして「完了」を選択します。
手描きで描かれた曲線は、CATIAのスケッチャー上で編集することができます。

また、スケッチャー内で平滑化ツールを使用することで、曲線の平滑化を行うことができます。

平滑化ツールは、「平滑化」ボタンをクリックしてアクセスできます。

平滑化ツールには、平均化や減衰などのオプションがあり、曲線をより滑らかに調整することができます。

【Question】CATIAで任意の曲線を自動で描き、平滑化するVBSプログラムを以下の手順で作成してください。

以下は、CATIAで任意の曲線を自動で描き、平滑化するVBAプログラムの例です。

CATIA V5R21で動作確認を行っています。

CATIAを起動し、VBAエディタを開きます。
「ツール」-「参照設定」をクリックし、「CATIA V5 Type Library」にチェックを入れてOKをクリックします。
新しいモジュールを作成し、以下のコードを入力します。
Sub DrawAndSmoothCurve()
    Dim curPart As Part
    Set curPart = CATIA.ActiveDocument.Part
    
    ' 曲線を作成
    Dim curSketch As Sketch
    Set curSketch = curPart.Sketches.Add(curPart.OriginElements.PlaneXY)
    Dim curCurve As Curve2D
    Set curCurve = curSketch.Factory2D.CreateCurve(0, 0, 10, 10, 20, 20)
    
    ' 曲線を平滑化
    Dim curSmoothCurve As Curve2D
    Set curSmoothCurve = curCurve.Smooth(curPart, 0.2)
    
    ' 3D曲線を作成
    Dim cur3DCurve As Curve
    Set cur3DCurve = curPart.HybridShapeFactory.AddNewCurveFromGeometricalRepresentation(curSmoothCurve)
    
    ' パラメータを設定
    cur3DCurve.SetClosing(CatVisNo)
    cur3DCurve.SetStartPointMode CatVisSmooth
    cur3DCurve.SetEndPointMode CatVisSmooth
    
    curPart.Update
    
    MsgBox "曲線が描かれ、平滑化されました。"
End Sub

このプログラムでは、曲線を自動的に描画し、平滑化します。

具体的には、最初に現在のパーツを取得し、スケッチを追加し、そこに曲線を作成します。

次に、Smoothメソッドを使用して曲線を平滑化し、

AddNewCurveFromGeometricalRepresentationメソッドを使用して平滑化された曲線を3D曲線に変換します。

最後に、必要なパラメータを設定し、Updateメソッドを使用して変更を保存します。
このプログラムを実行するには、VBAエディタからDrawAndSmoothCurveサブルーチンを実行するか、

Excelなどの外部アプリケーションでマクロとして呼び出すことができます。
注意点として、このプログラムは曲線を固定の座標値で作成しています。

必要に応じて、座標値を変更するか、ランダムな座標値を生成する関数を作成して、自動的に曲←バックレwww


1.始点の座標の入力を求めるウィジェットを表示させる。
2.マウスを始点から任意の位置まで移動させ、終点の座標を取得する。
3.マウスの軌跡をワークベンチに表示させる。
4.最小二乗法を用いて再構築し、ワークベンチに再表示する。

以下は、CATIAで任意の曲線を自動で描き、平滑化するVBSプログラムの例です。手順に従って説明します。

1.始点の座標の入力を求めるウィジェットを表示させる。

Dim startPoint(2)
Dim startPointInput as Variant
startPointInput = CATIA.ActiveDocument.Selection.Inputbox("Please select the starting point of the curve", "Select a Point", 0, 0, , True)
If IsEmpty(startPointInput) Then
    Exit Sub ' もしキャンセルされたら処理を終了する
Else
    startPoint(0) = startPointInput(0).Value
    startPoint(1) = startPointInput(1).Value
    startPoint(2) = startPointInput(2).Value
End If

上記のコードは、CATIAの選択ウィジェットを使って、始点の座標をユーザーに入力してもらうようにします。

ウィジェットは、選択したいオブジェクトの種類を指定して、簡単に作成することができます。

選択された座標は、startPointという配列に格納されます。

2.マウスを始点から任意の位置まで移動させ、終点の座標を取得する。

Dim endPoint(2)
Dim endPointInput As Variant
Set endPointInput = CATIA.ActiveWindow.Selection
endPointInput.Clear ' 一度選択を解除する
MsgBox "Please draw the curve by moving your mouse and clicking when you're done." ' カーブを描くようにメッセージを表示
Set endPointInput = CATIA.ActiveWindow.Selection
If endPointInput.Count = 0 Then
    Exit Sub ' もしキャンセルされたら処理を終了する
Else
    endPoint(0) = endPointInput.Item(1).Value.X
    endPoint(1) = endPointInput.Item(1).Value.Y
    endPoint(2) = endPointInput.Item(1).Value.Z
End If


上記のコードは、CATIAの選択ウィジェットを使って、マウスで描いたカーブの終点の座標を取得します。

選択ウィジェットを使うことで、マウスで描いたカーブを選択することができます。

選択された座標は、endPointという配列に格納されます。

3.マウスの軌跡をワークベンチに表示させる。

Dim partDocument As PartDocument
Set partDocument = CATIA.ActiveDocument
Dim sketch As Sketch
Set sketch = partDocument.Part.Sketches.AddWithAutoConstraint(False)
Dim factory2D As Factory2D
Set factory2D = sketch.OpenEdition()
Dim curve2D As Curve2D
Set curve2D = factory2D.CreateLine(startPoint(0), startPoint(1), endPoint(0), endPoint(1

VBAの終了条件である「ESCキーが押された場合」を判定し、プログラムを終了する。

以上の手順をVBSで実装するためには、以下のようなプログラムが考えられます。

' CATIAオブジェクトの取得
Set CATIA = GetObject(,"CATIA.Application")

' ドキュメントを取得
Set PartDoc = CATIA.ActiveDocument

' スケッチャーを取得
Set Sketcher = PartDoc.Sketch

' スケッチを生成
Sketcher1.OpenEdition

' 初期化
Dim StartX, StartY, EndX, EndY
StartX = 0
StartY = 0
EndX = 0
EndY = 0
Dim IsStarted
IsStarted = False

' 始点の座標の入力を求める
StartX = InputBox("始点のX座標を入力してください")
StartY = InputBox("始点のY座標を入力してください")

' マウスの移動イベントを登録
Dim SketchMouse
Set SketchMouse = Sketcher1.Mouse
SketchMouse.StartTracking

' メインループ
Do While True
    ' マウスの状態を取得
    Dim MouseState
    MouseState = SketchMouse.GetState

    ' ESCキーが押された場合は終了
    If MouseState = catCancel Then
        Exit Do
    End If

    ' マウスの位置を取得
    Dim CurrentX, CurrentY
    SketchMouse.GetXY CurrentX, CurrentY

    ' 始点が設定されている場合
    If IsStarted Then
        ' マウスの軌跡を描画
        Sketcher1.SetTemporaryAxis CurrentX, CurrentY, 0, EndX, EndY, 0

        ' 終点の座標を更新
        EndX = CurrentX
        EndY = CurrentY
    End If

    ' 左クリックが押された場合
    If MouseState = catMouseSelect Then
        ' 始点が未設定の場合は設定する
        If Not IsStarted Then
            IsStarted = True
            EndX = CurrentX
            EndY = CurrentY
        Else
            ' 曲線の作成
            Dim curve
            Set curve = Sketcher1.CreateCurve(StartX, StartY, 0, EndX, EndY, 0)

            ' 平滑化
            curve.Smooth

            ' 再描画
            Sketcher1.Clear
            Sketcher1.CloseEdition
            Sketcher1.DisplayGrid = False
            Sketcher1.ModifyMode = True
            Sketcher1.OpenEdition
            Set curve = Sketcher1.CreateCurve(StartX, StartY, 0, EndX, EndY, 0)
            curve.Smooth
            Sketcher1.CloseEdition
            Exit Do
        End If
    End If
Loop

' スケッチを終了
Sketcher1.Clear
Sketcher1.CloseEdition

この生成された曲線は、多くの場合、滑らかではありません。

4.そこで、平滑化を行います。平滑化のためには、以下の手順を実行します。

' スプライン曲線生成
Set spline = part.ShapeFactory.AddNewSpline(crvPts)
spline.ComputeDataOnCreation = False
spline.Close = False
spline.GeometricContinuity = catG1
spline.Interpolation = catCubicSpline

' 平滑化
Set smoothingOp = part.ShapeFactory.AddNewSmoothingOperation(spline)
smoothingOp.Type = catSmoothingOperationAutomatic
smoothingOp.Build
Set smoothCurve = smoothingOp.OutElement

ここでは、スプライン曲線を生成し、その後、平滑化を行っています。

catG1は、曲線の幾何学的な連続性を指定するための定数であり、G1連続曲線を生成することを指定しています。

catCubicSplineは、スプライン曲線を生成することを指定しています。

AddNewSmoothingOperationメソッドを使用して、平滑化操作を作成し、

そのタイプをcatSmoothingOperationAutomaticに設定しています。

最後に、Buildメソッドを呼び出して平滑化操作を実行し、結果をOutElementプロパティから取得しています。

結果の表示
平滑化された曲線を表示するには、以下のようにします。

' 曲線の再表示
part.InWorkObject = smoothCurve
part.UpdateObject(smoothCurve)
まず、InWorkObjectプロパティに、平滑化された曲線を設定します。

次に、UpdateObjectメソッドを呼び出して、曲線を再表示します。

以上が、CATIAで任意の曲線を自動で描き、平滑化するVBSプログラムの作成手順になります。


始点と終点の座標を入力する方式で直線を描画するVBAプログラムを実行してみた結果

2023-03-22 13:54:22 | VBA
ChatGPTの回答の通りにやってみた。
【始点と終点の座標を入力する方式で直線を描画するVBAプログラム】
 
Sub DrawLine()
 Dim StartX As Integer
 Dim StartY As Integer
 Dim EndX As Integer
 Dim EndY As Integer
 
 ' 始点の座標の入力を求める
 StartX = InputBox("始点のX座標を入力してください")
 StartY = InputBox("始点のY座標を入力してください")
 
 ' 終点の座標の入力を求める
 EndX = InputBox("終点のX座標を入力してください")
 EndY = InputBox("終点のY座標を入力してください")
 
 ' 直線の描画
 With ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
  .Line.Weight = 2 ' 線の太さを指定
 End With
End Sub
 
 
この通り、ExelのマクロからViualBasicEditorを開き、コピペで入力して実行してみた。
 
入力ボックスが現れ、始点のX座標の入力を求めてきたので100と入力。
次に同様に始点のY座標を入力するよう求められた。
以下略。
最終的に無事ワークシートに斜線が描かれた。
 
※ChatGPT Good Job!!!

完全未経験から5ヶ月でエンジニアになった話

2023-03-22 02:09:23 | 日記

完全未経験から5ヶ月でエンジニアになった話 - Qiita

完全未経験から5ヶ月でエンジニアになった話 - Qiita

はじめに昨日Web系企業から内定をいただき、4月からエンジニアとしてのキャリアをスタートさせることになりました。少々特殊な道筋ですが、何か役立つ情報があれば幸いで...

Qiita

のスクールを紹介している。
ここではRubyとGoが学べるとのこと。

Goは出版されている書籍が少な過ぎて独学が極めて困難である。
だからこそGoが学べるHappines Chainは貴重な存在で十分な価値があると感じた。

※中には

みたいな

「◎フリーエンジニア養成コース
月収50万円以上稼ぐ、フリーエンジニアとして独立を目指せる、1年間のコースです。

受講料金:980,000円(税込)」

という悪質なスクールもあるので注意。

本当にフリーランスエンジニアとなってバンバン案件を獲得できるなら980000円でも安いと思うけど、現実はそんなに甘くないはず。

ChatGPTでプログラミング未経験でも様々なアプリを簡単に自作できるようになった現在では、フリーランスエンジニアとしてやれる案件はソースコード修正ばかりになっていくと思われる。

IT系企業でもプログラマーやエンジニアをできるだけ雇わず、アイデアをChatGPTを使って大雑把にプログラミングし、コード修正をフリーランスに安い単価で丸投げしていく形になるであろう。