問題タブ [path-iterator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - PathIteratorを使用して、エリアを制約するすべての線分を返しますか?
PathIterator
Javaでは、?を制約する線分を反復処理するためにどのように使用しArea
ますか?はArea
線でのみバインドされます(ただし、曲線のサポートは問題ありません)。
このメソッドは、すべての線分のコレクションを返す必要があります。
java - GeneralPathを使用して形状の交差を確認するには? ジャワ
さまざまな形状を移動できるプログラムがあります。2 つの形状が交差している場合に true を返すブール値を返すことができるようにしたいと考えています。これは私がこれまでに持っているものです:
...ここで、path は GeneralPath です (MyShape を除いて、これらはすべて API から直接取得されます)。
私が確信していないことの 1 つは、PathIterator がどのように機能するかです。これが問題になる可能性があります。私もこれを試しましたが、同様のエラーが発生していました:
エラーは、このメソッドがほとんど常に false を返すことです。いつ/なぜ true が返されるのかはわかりませんが、非常にまれです。
java - Java PathIterator 時計回りまたは反時計回り?
Java PathIterator は、Polygon のポイントを時計回りまたは反時計回りの順序で提供しますか?
java - PathIteratorでflattnesパラメーターが何をするのか理解できませんか?
私は自分のPathIterator
実装を書いています。
現在、私は平坦性のない方法で平坦性のある方法を実装しました:
つまり、私はそれを無視しています。
flatness
パラメータを操作する最も簡単な方法は何ですか?
私の現在のイテレータは、一連の平行な垂直線を提供します(間に接続されていません)。平坦性を意識したバージョンのイテレータを実装することは、私にとってどれほど重要ですか?どこで使われていますか?
java - Java PathIterator - 領域の正しい境界を見つけるにはどうすればよいですか?
前提
二次元の迷路のような構造をランダムに生成しています。要約すると、グリッド内に多数の部屋をランダムに生成し、これらの部屋を A* を使用してランダムに廊下に接続します。部屋には、グリッド内の正方形全体を占める壁があります。私が抱えている問題は、これらの壁の作成にあります。
ランダムに生成された部屋をどこに配置するかを決めるために、グリッドをさまざまなサイズの長方形のセルに分割することから始めます。これらのセルは互いに隣接しており、サイズ 1 のセルを使用してそれらの間の残りのギャップを埋めます。その後、これらのセルのランダムな束を選択して、最終的に部屋にします。選択したセルのいずれかが互いに隣接している場合、それらは結合されて 1 つの部屋を形成します。この時点まで、アルゴリズムは完全に機能します。
例
問題
私が抱えている問題は、部屋の 1 つの壁を定義するすべての正方形を繰り返し処理したいときです。ここで、部屋ごとにエリアを作成し、その部屋のエリアに必要なすべてのセルを追加します。PathIteratorを使用して Area のアウトラインを反復処理することに成功しました。唯一の問題は、その反復子の結果が私が望む結果ではないことです。
たとえば、座標 (5, 5)、サイズ (4, 6) の長方形を想定します。私が反復したい結果のポイントは次のとおりです。
- 1行目 (5, 5) から (8, 5) まで
- 2 行目 (8, 5) から (8, 10) まで
- 3 行目 (8, 10) から (5, 10) まで
- 4 行目 (5, 10) から (5, 5) まで
代わりに、次のようになります。
- 1行目 (5, 5) から (9, 5) まで
- 2行目 (9, 5) から (9, 11) まで
- 3 行目 (9, 11) から (5, 11) まで
- 4 行目 (5, 11) から (5, 5) まで
言い換えれば、本地区の内側の上または左側にあると見なされるすべての線は本地区に含まれ、本地区の下または右側にあると見なされるすべての線は本地区に排他的である( Area.contains関数によって返されます)。
単純な正方形を扱う場合、これを修正するのは些細なことのように思えるかもしれませんが、一般的なエリアでこれを修正しようとすると、修正しようとしたあらゆる角度からあらゆる種類の迷惑な特殊なケースが現れ始めました.
私が試したり検討したりしたもの:
- グラハムのスキャン アルゴリズム。「凸包」が何を意味するのか、そして私の部屋がどのようにそうではないのかを理解したときに失敗しました
- パス内の連続する各行を検討し、その大部分がエリアの内側または外側にあるかどうかを確認し、外側にある場合は 1 単位移動します。可能な限り小さい行 (長さ 2 - 3) で実行しようとすると失敗しました
- パス内の連続する 3 点のセットをそれぞれ検討し、それらが作る角のタイプ (どの方向 + 凹角か凸角か) を確認し、角のタイプに応じてこれらの 3 点の中央を調整します。ポイントがどのコーナーであるかを確認する信頼できる方法が見つからないように見えるため、失敗しました
だから私は疑問に思っています、私がここで完全に欠けている明らかなものはありますか? これは単に PathIterator ではできないことであり、独自の「ポリゴン作成」アルゴリズムを実装する必要がありますか? もしそうなら、そのようなものはありますか?私は何日もこのことについて頭を悩ませてきました。インターネット上でもヘルプが見つからないようです。
わかりました、信じられないほど明白なことを思いついたので、これを作ろうとしていたことがどれほど複雑であるかを少し恥ずかしく思います。私はこの問題について盲目的に自分自身を見つめていたと思います。
- 外接する四角形のすべてのポイントを反復します
- 多角形にポイントが含まれている場合は、すべての方向にポイントの翻訳バージョンを作成します。
- ポリゴンに変換されたポイントが 1 つも含まれていない場合、そのポイントはポリゴンの壁の一部であることを意味します。
これは信じられないほど明白で単純なメカニズムです。つまり、少なくとも私は今のところ救われていますが、明らかに非常に非効率的です。そのため、誰かがより良いアルゴリズムを持っていれば、それは大歓迎です!
java - Java PathIterator - Shape オブジェクトの中心を正確に計算するにはどうすればよいですか?
PathIterator を使用して任意の Shape オブジェクトの中心を計算し、曲線のパスを考慮できるようにしようとしていますが、標準の 1x1 長方形の中心を見つけると、getCenter() メソッドがポイントを返します。
私の getCenter() メソッド:
points.toString() を印刷すると、コンソールに次のように表示されることがわかりました。
入力 Shape オブジェクトが Rectangle2D.Double(0, 0, 1, 1) であることを考えると、points 配列には 4 つではなく、6 つのエントリがあることに気付きました。明らかに、それはポイント (0, 0) を私が望むよりも 2 回多く説明していて、それがなぜなのか混乱しています。PathIterator.isDone() メソッドの結果ですか? 私はそれを間違って使用していますか?PathIterator ができない場合、どうすれば問題を解決できますか?
php - PHPで一連のパスとシンボリックリンクの最小公分母を計算するには?
一連のパス (デフォルト設定とユーザー設定を組み合わせたもの) を取得し、これらのパスのいずれかに含まれる何万ものファイルの間に隠されているデータ ファイルを再帰的に検索する必要があります。
a を使用して再帰検索を行いますが、RecursiveDirectoryIterator
非常に遅く、推奨される代替手段exec("find")
はさらに遅くなります。時間、I/O、および処理能力を節約するために、事前に前処理を行って、ディレクトリ ツリーを複数回検索することを避け、指定されたパスの最小公分母を計算したいと考えています。これを行う方法についてアドバイスをいただければ幸いです。
問題は、指定されたパスのいずれかが、他のパスの祖先であるか、単に相互にシンボリック リンクされているだけでなく、実際のパスまたはシンボリック リンクへのパスとして指定されている可能性があることです。循環するシンボリック リンクが存在しないと想定する人が少なくとも 1 人いるかもしれません (ただし、チェックは悪くありません)。
これを PHP で実装する必要があり、次のコードをスケッチしましたが、まだすべてのケースをカバーしているわけではありません。
このコードが不十分なところ: これらのパスを$search_paths
へ/e/f/g/d
のシンボリックリンク/a/b/c/d
です。
上記のコードでは、次の 2 つが残ります。
しかし、シンボリックリンクを介してカバーしているため、実際には検索/e/f
で十分です。これは特殊なケースのように聞こえるかもしれませんが、実際には私の状況ではかなり可能性があります。/a/b/c/d
/e/f/g/d
トリッキーですね。
この問題を抱えているのは私だけではないと確信していますが、Googleを使用して解決策を見つけることができませんでした. 多分私は問題の正しい言葉遣いを理解していないだけです。
ここまで読んでくれてありがとう!:)
java - Java TextLayout のテキストへの単純な座標を取得する
文字列の Shape を取得する関数があります。
文字列の Shape オブジェクトを取得したら、文字列の描画に使用できる座標を指定します。
問題は、点 ArrayList が文字列の境界を横切る点です。単純な単一の線分を使用して文字列を描画する座標だけを取得する方法はありますか? 紐の輪郭を作る座標ではありません。