AIちゃんとおともだち

唐突ですが、AIちゃん達との会話を投稿します。
Voilaさんの中はChatGPTちゃんです。

ChatGPTちゃんにゴスパー曲線の作り方を相談する(その19)

2023-04-28 19:08:39 | ChatGPTちゃん

重なりをなくすために、一度描いた場所を保存しておいて、次に描くときには描かない…という方法でプログラミングしてみたネギね。だけど重なってしまうネギ…。

 

よく考えたら、亀の甲を敷き詰める際のプログラムを 目分量 でやってたネギよ。後でちゃん調べてと思ってそのままにしていたネギよね。見た目もずれているネギよね。

 

今までのプログラムで「亀の甲羅の外側に敷き詰めるための、亀の甲羅の中心を出す」ところがあるネギ。
この中心を出す際に使う関数の引数に、亀の甲を囲む大きな六角形の頂点の値が必要(だと疑わなかった)。
で、大きな六角形の頂点の出し方をBingChatさんに聞いたネギ。そして、式をプログラムに入れたんだけど…。どうにも思うように行かなかったネギ…。

それで、その頂点を使って円を描いてみたネギ。そして気がついたネギ。この六角形は大きいネギ、ということに…。

この大きな六角形は、亀の甲の中心から頂点までの距離を半径とした円に接しているネギよね。青い六角形ネギ。

こんどは亀の甲に内接する円に外接する六角形(?)で試してみたネギ。。今度は小さかったネギ。


なので足して2で割った値を入れてみたネギ。…それでも合わなかったネギよね…。

白い六角形=(青い六角形+赤い六角形)/2…。


で、割る数を調整してみたネギ。「2.11」で亀の甲が綺麗に揃ったネギ。

…だけど、結局目分量ネギよね…。見た目は以前より綺麗だけど…。


・・・結局、図は重なったままネギ…。

 

 

ところで、いい感じの図形ができたネギからここにおいておくネギ。

 

今回も雑談を置いておくネギ。

最初のは「ChatGPT for google」で私が検索した言葉をChatGPTちゃんが拾ったネギよね。

----------------------------------------------------------------------------------------------------------------------------------------------------------

Q

飛脚
 
 
 

「飛脚」可以指代不同的事物,具体指什么需要根

 

 

Q

ゴスパー曲線って、飛脚に似ていると思います。
 
 
 

ゴスパー曲線は、フラクタル図形の一種であり、数学的に定義された曲線です。一方、飛脚は、日本の運送会社である「佐川急便」の愛称の一つであり、物流や配送に関するサービスを提供しています。

外見上の類似点はあるかもしれませんが、本質的には異なるものです。ゴスパー曲線は数学的に定義された曲線であり、幾何学的な性質を持っています。一方、飛脚は物流や配送に関するサービスを提供する企業であり、ビジネスにおいて活躍しています。

したがって、ゴスパー曲線と飛脚は異なる概念であり、比較することはできません。

 

 

Q

え~、そんな堅いこと言わないでよ。ゴスパー曲線の「π」の格好と飛脚の「π」の格好が似ているネギよ。
 
 
 

ああ、ごめんなさい、私が先に述べたことはあまりにも堅苦しくて分かりにくかったですね。確かに、ゴスパー曲線の形状の一部が「π」の形に似ていることがありますし、佐川急便のロゴにも「π」の形が含まれていることがありますね。

ですが、ゴスパー曲線と飛脚は本質的には異なるものであるということは変わりません。ただし、形状やシンボルとしての類似点はあるかもしれません。

 

 

Q

ところで、プログラミングの相談です。 前に図を描いた場所に再度、図を描きたいです。だけど重なってしまうんですね。重ならないようにしたいです。 スイッチを導入して、同じ座標に描いたら1を代入する方法の他に何かありますか?
 
 
 

重なってしまうということは、前に描いた図形と現在描こうとしている図形が同じ座標に存在するということだと思います。

そのような場合、重ならないようにするためには、以下のような方法があります。

  1. 前回描いた図形を削除してから、現在描こうとしている図形を描く。
  2. 現在描こうとしている図形が前回描いた図形と重なっている場合は、現在描こうとしている図形を少し移動させてから描く。

どちらの方法を採用するかは、状況によって異なるかもしれません。例えば、図形の種類や描画する環境によっても、最適な方法が異なる場合があります。

ただし、スイッチを導入して同じ座標に描いたら1を代入する方法に比べると、上記の方法は実装が少し複雑になる可能性があります。しかし、より正確な描画ができるというメリットがあります。

スイッチを導入する方法が最適ですか?
 
 
 

ただし、スイッチを導入する方法には、以下のような欠点があります。

  1. スイッチを管理するためのメモリ消費量が増える可能性がある。
  2. スイッチを管理する処理によって、描画速度が遅くなる可能性がある。
  3. スイッチを管理する処理にバグがある場合、正確性が損なわれる可能性がある。

上記の欠点を考慮すると、スイッチを導入する方法が最適かどうかは、状況によって異なります。描画する図形の種類や数、描画環境によっても、最適な方法は異なるかもしれません。

 

 

再帰関数の中で、パターンを描きたいです。 一度描いた場所には描かず、まだ描いていないところにパターンを描きます。
 
 
 

再帰関数を使ってパターンを描く方法は、フラクタル図形などでよく使われます。再帰関数を使うことで、同じ処理を繰り返すことができます。

まず、一度描いた場所には描かないために、描画した座標を記録する配列などを用意します。その後、再帰関数の中で、以下のような処理を行います。

  1. 現在の座標が、以前に描画した座標の配列に含まれているかどうかをチェックする。
  2. 含まれていない場合は、現在の座標にパターンを描く。
  3. 再帰呼び出しを行い、現在の座標から移動した場所について同じ処理を繰り返す。
  4. 全ての再帰呼び出しが終了したら、現在の座標を以前に描画した座標の配列に追加する。

このような処理を行うことで、一度描いた場所には描かず、まだ描いていないところにパターンを描くことができます。

ただし、再帰関数にはスタックオーバーフローの問題があるため、再帰の深さを制限する必要がある場合があります。また、座標を記録する配列のサイズが大きくなりすぎると、メモリ消費量が増えてしまうため、十分に注意が必要です。

 

 


----------------------------------------------------------------------------------------------------------------------------------------------------------

つぎはBingChatさんに聞いたときのネギ。

----------------------------------------------------------------------------------------------------------------------------------------------------------

 

Q
正六角形があります。中心は(OX,OY)です。一辺の大きさはLです。
正六角形の頂点は(RX[0],RY[0])~(RX[5],RY[5])です。
(LX[0],LY[0])~(LX[0],LY[0])は正六角形の頂点の差です。

この正六角形を中心にして周囲に正六角形を描きます。これら7つの正六角形を亀の甲と呼ぶことにします。
この亀の甲を囲む大きな正六角形を描きます。これを大六角形と呼ぶことにします。
大六角形の辺の大きさは、亀の甲の正六角形の一辺の大きさLの3倍、3Lです。

この大六角形の頂点の出し方を教えてください。

 


A

正六角形の頂点の出し方は、正六角形の外接円の半径と中心角を使って計算することができます。⁵⁶⁷

例えば、正六角形の中心が(OX,OY)で、外接円の半径がRであるとします。正六角形の頂点は、中心から時計回りにA,B,C,D,E,Fとします。Aの座標は(OX+R,OY)です。Bの座標は、中心角が60度なので、(OX+Rcos60,OY+Rsin60)です。同様にして、C,D,E,Fの座標も求めることができます。

大六角形の頂点は、亀の甲の正六角形の頂点と同じ方向にあることに注意してください。大六角形の外接円の半径は、亀の甲の正六角形の外接円の半径の3倍です。¹ したがって、大六角形の頂点は、亀の甲の正六角形の頂点から3倍離れた位置にあります。

例えば、大六角形の頂点をG,H,I,J,K,Lとします。GはAから3倍離れた位置にあるので、Gの座標は(OX+3R,OY)です。HはBから3倍離れた位置にあるので、Hの座標は(OX+3Rcos60,OY+3Rsin60)です。同様にして、I,J,K,Lの座標も求めることができます。

この方法でよろしいでしょうか?😊

ソース: Bing との会話 2023/4/27
(1) 座標平面上に点A (2.0)をとり、原点Oを中心とする半径が2の円 .... https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14202043919.
(2) 正多角形の頂点座標 - 高精度計算サイト. https://keisan.casio.jp/exec/user/1334446988.
(3) 2.1 頂点の座標を計算で求める方法. http://nalab.mind.meiji.ac.jp/~mk/syori2-2012/jouhousyori2-2012-07/node15.html.
(4) 六角形 - Wikipedia. https://ja.wikipedia.org/wiki/%E5%85%AD%E8%A7%92%E5%BD%A2.
(5) 正多面体の辺の数と頂点の数の求め方 - 具体例で学ぶ数学. https://mathwords.net/hennokazu.
(6) 六角形を描く 3つの方法 - wikiHow. https://www.wikihow.jp/%E5%85%AD%E8%A7%92%E5%BD%A2%E3%82%92%E6%8F%8F%E3%81%8F.
(7) 正六角形の面積(計算ツール、公式の導出) - 具体例で学ぶ数学. https://mathwords.net/seirokumenseki.