CyberChaos(さいばかおす)

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

フリーハンドで描いた曲線を最小二乗法で平滑化するPythonプログラム

2023-03-19 18:16:05 | python
フリーハンドで描いた曲線の画像ファイルを読み込み、最小二乗法を用いて平滑化するプログラムコードをPython言語で書いてください
 
以下は、Pythonでフリーハンドで描いた曲線の画像ファイルを読み込み、最小二乗法を用いて平滑化するプログラムコードです。このコードは、NumPyおよびmatplotlibライブラリを使用しています。
 
import numpy as np
import matplotlib.pyplot as plt
 
# 画像ファイルの読み込み
img = plt.imread('曲線の画像ファイル名.png') #ここではC:/Users/User/Desktop/test.pngとした。
 
# 画像をグレースケールに変換
gray = np.mean(img, axis=2)
 
# フリーハンドで描いた曲線の座標を取得
points = np.array(np.nonzero(gray)).T
 
# 最小二乗法による平滑化
order = 3
x = points[:, 0]
y = points[:, 1]
coeffs = np.polyfit(x, y, order)
poly = np.poly1d(coeffs)
new_y = poly(x)
 
# 平滑化した曲線をプロット
plt.plot(x, new_y, 'r-')
plt.show()
このコードでは、以下の処理を行います。
 
1.画像ファイルを読み込み、グレースケールに変換します。
2.フリーハンドで描いた曲線の座標を取得します。
3.最小二乗法により、曲線を平滑化します。ここでは、3次の多項式を使用しています。
4.平滑化した曲線をプロットします。
注意点としては、フリーハンドで描いた曲線が閉じていない場合、プログラムの出力結果が正しくない可能性があることです。また、平滑化により曲線の形状が変化するため、必要に応じてパラメーターの調整が必要になる場合があります。
の画像が下のようになった。
 
※order = の所を3から100とかに変えたら元の曲線により近付くようだ。
ただし1000000とかデカ過ぎるとパソコンがフリーズするので注意。
 
P.S.
なぜこんなことを思い付いたのかというと、化学の実験結果をグラフにまとめてレポートとして提出する時に最小二乗法という理論を使わなければならなかったことを電車に乗っている際に思い出したからだ。
化学の実験結果は直線を描くものであった。いかにも任意の点群の間を計算したかのようにサッと定規で適当にひいて誤魔化していた。
直線じゃなくてフリーハンドで描いた曲線に応用できないか?
応用したら汚いフリーハンドの曲線が滑らかになるのではないか?
と考えて、Pythonでのプログラミングを考えたのだ。
そして実行に移したら見事に成功した。
読み込むファイル名の所もパスを入れなければならないのでは?と思って自分で付け加えた。
次はウィジェット化してみたい。
 
このプログラムはフリーハンドでイラストを描く際やCADのフリーハンドによるモデリングにも応用できると思われる。
 
複雑な曲線を滑らかで自然にCADで描くのは結構骨が折れるものだ。
 
それを楽にしたいと思った。
 
P.S.2
Adobeillustratorなどで曲線を描く際に、複数の折点が生じてカクカク気味になる場合もあるだろう。
自分の望んだ通りの形状にするのはなかなか面倒なはずである。
そこで最小二乗法を使えば、より滑らかで自然な曲線になるはずだ。
 
P.S.3
元の画像(修正前)
修正後

PythonでCATIAのモデリングを自動化する方法は?

2023-03-19 13:48:19 | python
PythonでCATIAのモデリングを自動化する方法は?

Pythonを使用してCATIAのモデリングを自動化するには、以下の手順を実行する必要があります。

Pythonのスクリプトエディタを開き、必要なライブラリをインポートします。CATIAにアクセスするには、win32com.clientライブラリを使用します。
CATIAを起動し、必要なドキュメントを開きます。CATIAのオブジェクトを取得するには、win32com.client.Dispatch関数を使用します。
必要なCATIAオブジェクトを取得します。これには、Part、Body、Sketch、Dimension、Featureなどが含まれます。
モデルを自動的に作成するためのコードを書きます。これには、寸法や位置などのパラメータを指定する必要があります。
Pythonスクリプトを実行して、CATIAモデルを自動的に作成します。
以下は、例として、Pythonで円柱を作成する方法です。

import win32com.client

# Start CATIA
catia = win32com.client.Dispatch("CATIA.Application")
documents = catia.Documents
partDocument = documents.Add("Part")

# Get the Part object
part = partDocument.Part

# Define the parameters for the cylinder
radius = 10
height = 20

# Create the cylinder
shapeFactory = part.ShapeFactory
cylinder = shapeFactory.AddNewCylinder(radius, height)
cylinder.Name = "Cylinder"

# Update the Part document
part.Update()

# Save the Part document
partDocument.SaveAs("Cylinder.CATPart")
partDocument.Close()

このスクリプトでは、win32com.clientライブラリを使用してCATIAにアクセスし、新しいPartドキュメントを作成し、円柱の半径と高さを指定して、円柱を作成しています。最後に、Partドキュメントを保存して閉じます。

このように、Pythonを使用してCATIAのモデリングを自動化することができます。


CATIAでのモデリングを自動化する方法

2023-03-19 13:41:36 | CATIA
CATIAでのモデリングを自動化する方法は?

CATIAでモデリングを自動化するには、CATIAのマクロやVBスクリプトを使用する方法があります。以下に、CATIAのモデリングを自動化する一般的な手順を示します。 CATIAのマクロエディタを開きます。 マクロを記述するための新しいモジュールを作成します。 必要な変数を定義し、必要なライブラリをインポートします。 モデルを自動的に作成するためのコードを書きます。これには、寸法や位置などのパラメータを指定する必要があります。 マクロを保存して、実行します。 以下は、例として、CATIAのマクロで円柱を作成する方法です。

Sub CreateCylinder()

' Create a new Part document
Dim PartDoc As Part
Set PartDoc = CATIA.ActiveDocument
PartDoc.Body.Clear

' Define the parameters for the cylinder
Dim Radius As Double
Radius = 10
Dim Height As Double
Height = 20

' Create the cylinder
Dim Cylinder As Shape
Set Cylinder = PartDoc.Part.ShapeFactory.AddNewCylinder(Radius, Height)
Cylinder.Name = "Cylinder"

' Update the Part document
PartDoc.Part.Update

End Sub

このマクロでは、新しいPartドキュメントを作成し、円柱の半径と高さを指定して、円柱を作成しています。最後に、Partドキュメントを更新しています。

このように、CATIAのマクロを使用することで、モデリングを自動化することができます。



謎のPythonライブラリrython

2023-03-19 11:46:23 | python
悪戯半分に冗談半分でpip install rythonとコマンドを打ってみたら、マジでダウンロード→インストールしやがった。





CythonやJythonは有名だが、rythonってなんじゃこりゃ?www

RubyとPythonのハイブリッドか?
それともRustとPythonのハイブリッドか?

P.S.
ちなみに
aython
bython
cython
dython
・・・
とアルファベット順に頭の文字を変えて試してみたら、ダウンロード→インストールできたものとできなかったものがあった。

ゲーム業界でおすすめの書籍

2023-03-19 07:33:39 | Unity

ゲーム業界で活躍するプロに聞いた「ゲーム開発現場で読まれている書籍」&オススメ書籍を厳選して紹介!【ゲームメーカーズ スクランブル】

ゲーム業界で活躍するプロに聞いた「ゲーム開発現場で読まれている書籍」&オススメ書籍を厳選して紹介!【ゲームメーカーズ スクランブル】

2023年3月4日(土)、ゲームメーカーズは、ゲームづくりに関わる方同士で盛り上がるためのリアルイベント「ゲームメーカーズ スクランブル」を開催。本イベントでは、ゲーム...



黒酢の効果

2023-03-19 05:07:34 | 日記



1.疲労感の軽減
2.深い睡眠
3.夜間頻尿の改善
4.整腸効果

毎晩飲み続けて一週間程になるが、特に2と3はかなりの実感があった。
Google検索による情報では1とダイエット効果が出てきたが、俺はデブじゃないからダイエット効果については今のところわからない。

pycatia CATIAをPythonで自動化するプロジェクト

2023-03-19 02:35:31 | CATIA

CATIA V5 用の Python モジュール
ここにある多くのコード例は、pywin32 を使用した CATIA V5 の自動化について詳しく説明していますが、Paul Bourne はpycatia モジュールを作成して、Python での CATIA の使用を簡素化しました。プロの環境でも CATIA と Python を使用できるので、私はこのアプローチを非常に気に入っています。

pywin32 または comtypes では、CATIA のデータ型で非常にトリッキーな状況がいくつかあったことを覚えています。このモジュールは、内部で VBA を利用してこれらの問題を解決しようとします。面白いアプローチ!

Paul はまだこのモジュールをアルファとして分類しています。しかし、Github の同類は正しい方向性を示しています。頑張れポール。

ポストする2019/04/19
CATIA での ByRef 配列の操作
これは実際にはスクリプトではありませんが、Python を使用して win32com を使用して CATIA V5 を自動化し、自動化に公開されているすべての機能を使用しようとしたときに遭遇した大きな障害に対する解決策を見つけました。

遅延バインディング (動的ディスパッチ) を使用するだけで非常に簡単に開始できることは誰もが知っていますが、より高度なユーザーは、Byref 配列を必要とする Sub を使用できないことを既に知っています。win32com 関連の開発者はこの問題を認識していますが、一部のアプリケーションではこの種の Sub が非常に集中的に使用されているという事実には気づいていません。つまり、Point クラスから派生した任意のクラスの GetCoordinates や任意のクラスの GetFirstAxis などのトリプレットを取得するためにすべての sub が使用されています。 Plane クラスから派生します。
開発者は、問題を解決するには makepy を使用してアーリー バインドに切り替えるだけで十分だと述べていますが、CATIA V5 R19 の場合、問題はまったく解決されず、さらに問題が追加されました。読み続けて

2019/02/19
Dassault Systemes CATIA 用の Python ライブラリ
この Web サイトには、Dassault Systemes CATIA V5 を Python と Microsoft COM で自動化する方法を説明する例が既にいくつかあります。昨日、Paul は私にメールを送り、Python ライブラリを作成したと述べました。このライブラリは、いくつかの基本的な機能を備えた Python ライブラリにいくつかの COM マジックをパックしたものです。アセンブリ構造のトラバース、コンテキスト マネージャー、ファイルの変換、パーツ内の要素の検索などをカバーしています。

日本語がおかしいが、めんどくせーからGoogleChromeに翻訳させて、そのまま直さずにコピペした。
続く・・・