質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

5639閲覧

図形の中に長方形を敷き詰めたい

ohana1515

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/07/18 11:00

四角形の図形の中に長方形を並べるだけであれば,辺の長さから出すことができるのですが,四角形に限らず円や多角形などの中に並べるとなるとどうしていいのかわからなくなりました.
図形から少しでもはみ出した長方形は,線分交差判定により判定し,完全に図形の中に入っている長方形だけの数を求めたいと思っています.多角形であれば,四角形と線分の交差判定でできるかなと考えております.
いい方法や,参考になる文献,ホームページなどがあれば教えていただきたいです.
アドバイスをお願いしたいです.
言葉足らずかもしれませんがよろしくお願いします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

数学の専門家ではないので思いつきですが、

長方形を敷き詰めた大きな紙を想像すると、線分と交点の集まりに見做せます(方眼紙のような)
その上に図形を置いて、方眼紙の各交点一つ一つについて図形の内側か外側かの判定を行い
内側の点だけを残して各点を線で繋げば、内側に収まった長方形だけを残すことができると思います。
内側か外側かに関しては、ある点から一方に無限に伸ばした線が図形を構成する線と何回接するかを判定すればできそうです。参考

交点を求めるので、図形は数式で表現できる必要があります(不定形の多角形や直線と曲線で構成された図形でも、「図形を構成する線分一つ一つが数式で表現可能」であればそれらすべてと接触判定をすればいいので、大丈夫だと思います。)
図形の直径がわかっていれば、最初の長方形を敷き詰める範囲を限定できますので処理数も節約できると思います。

投稿2016/07/19 02:14

hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirohiro

2016/07/19 02:18

この方法では「もっとも多くの長方形を敷き詰める」や「少なくとも一つの長方形は図形と接触している」などは考慮していませんので、長方形の塊が内側に浮いたような結果になったり、(図形の直径から全体の大きさを作成するのでない場合などは)実行するたびに方眼紙が図形の中でずれていたりする可能性はあります。
guest

0

凸図形であれば
長方形メッシュの各点が「図形」内部に含まれるかを判定すれば簡単です。

問題はその判定方法ですが、
一番安直なのが、
中に長方形を詰める「図形」の表現を判定それ自体にしてしまいます。

例えば単位円なら、
UnitCircle(x,y) = (x^2 + y^2 <= 1)

(図形からこの判定をプログラム的に生成するのが面倒なので、
そこは人力計算して与えてしまおうということです。)

投稿2016/07/19 02:53

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

最密充填のまとめ
斜めにしたらもっとはいるんじゃないのとか考えてしまうんですよね。
まあ、決めた並べ方(横向き限定、左下からならべていく)のように限定すれば
答えはでるのかとは思いますが。

厳密でなくてもいいのであれば、コンピューターグラフィックス上に配置してピクセルの衝突でチェックするような方法でもいいんじゃないですか。

投稿2016/07/19 02:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

任意の図形に任意の図形を敷き詰めるアルゴリズムなんてあるんですかねえ。
その図形一つ一つについてそれぞれ違うアルゴリズムが必要だと思いますが。

投稿2016/07/18 11:49

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問