問題タブ [packing]
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.
c++ - 組合はマーシャリングやパッキングを実施できますか?
beejのネットワーキングガイドには、シリアル化のためのデータのマーシャリングまたはパッキングのセクションがあり、データのパッキングとアンパックのさまざまな機能(int、float、double ..etc)について説明しています。
以下に定義するようにunion(floatとdoubleについても同様に定義できます)を使用し、packおよびunpack関数よりもinteger.iのパックバージョンとしてinteger.packを送信する方が簡単です。
組合が悪い選択である理由を誰かが明らかにすることができますか?
データをパックするより良い方法はありますか?
java - Java JFrame pack() の問題
標準の Java ユーティリティを使用して、背景画像の上に画像を重ねようとしています。下の写真を見てください...
背景画像を作成するように見えるコードがあります (実際に動作することを確認できますか?)。また、画像を表示するために使用する JPanel の拡張機能を作成しました (このクラスは ImagePanel と呼ばれます)。
ただし、プログラムを起動すると、JFrame には 2 番目の画像しか表示されず、ウィンドウのサイズが変更されると画像が移動します。
背景画像がウィンドウのスペース全体を占める状態で、最初にウィンドウを開きたいと思います。次に、指定した場所に 2 番目の画像を一番上に表示したいと思います。
ruby-on-rails - Ruby でのテキストの書式設定 (納品書用)
現在取り組んでいる Ruby on Rails プロジェクト用に書式設定されたテキストの梱包伝票を生成する必要があります。Ruportを使用するか、自分で文字列にフォーマットしてテキストに出力することを検討しています。唯一の課題は、すべての出力を適切に正当化することです。常に適切に配置された、このような外観にする必要があります。推奨事項はありますか?
c++ - C /C++はsignedcharをintにパッキングします
4つの符号付きバイトを32ビットの整数型にパックする必要があります。これは私が思いついたものです:
これは良い解決策ですか?ポータブルですか(通信の意味ではありません)?既製の解決策はありますか、おそらくブーストですか?
私が最も懸念している問題は、負のビットをcharからintに変換するときのビット順序です。正しい振る舞いがどうあるべきかわかりません。
ありがとう
shader - テクスチャ内のアトリビュートのパッキング、遅延レンダリング
私は遅延シェーダー パイプを展開しています。G バッファーを統一された形式で保持する必要があるため、属性を圧縮する必要があります。残念ながら、これが実際にどのように行われるかについての良い情報を見つけることができませんでした。
固定小数点形式でコンポーネントごとに 16 ビットを使用する G バッファー形式があります。残念ながら、シェーダー モデル 3 ハードウェアをターゲットにしているため、ビット演算子を使用できません。では、基本的に、0..1 の範囲の 2 つの 8 ビット値を 1 つの 16 ビット チャネルにパックするにはどうすればよいでしょうか。できれば CG または HLSL のいずれかに適用できます。
java - Javaでは、負ではなく、最終的(オーバーフローではない)であると予想される整数をショートにパックすることは可能ですか?
"unsigned int" を short と back にします。これは可能ですか?その場合はどうすればよいですか?
うーん。符号付き数値がどのように実装されているか忘れました。質問は意味がありません。とにかくありがとう。私は自分自身に反対票を投じるつもりでしたが、代わりにそれを行うことができます。
algorithm - ポリゴン パッキング 2D
2 つの任意のポリゴンをパッキングする際に問題があります。つまり、2 つの任意のポリゴンがあります。この多角形に外接する長方形の面積が最小の場合、この多角形のそのような配置を見つける必要があります (回転と移動を行うことができます)。
私は、これが NP 完全問題であることを知っています。この問題を解決するための効率的なアルゴリズムを選択したいと考えています。No-Fit-Polygon アプローチを探しています。しかし、任意の 2 つのポリゴンの NFP を見つけるための単純で明確なアルゴリズムはどこにも見つかりませんでした。
algorithm - 高速ブロック配置アルゴリズム、アドバイスが必要ですか?
Fluxboxウィンドウマネージャーのウィンドウ配置戦略をエミュレートする必要があります。
大まかなガイドとして、ランダムなサイズのウィンドウが一度に1つずつ画面に表示されることを視覚化します。各ウィンドウの大まかなサイズでは、ウィンドウが互いに重なることなく、画面上に平均80個のウィンドウが表示されます。
システムにFluxboxとXtermがインストールされている場合は、xwinmidiarptoy BASHスクリプトを試して、私が何をしたいかの大まかなプロトタイプを確認できます。それが何をするのか、そしてそれがどのように使われるべきかを説明する私がそれについて書いたxwinmidiarptoy.txtノートを見てください。
ウィンドウが閉じ、以前に閉じていたウィンドウが占めていたスペースが、新しいウィンドウの配置に再び使用できるようになることに注意することが重要です。
アルゴリズムは、「最初から入力全体を利用できるようにすることなく、入力がアルゴリズムに供給される順序で、シリアルに1つずつ」データを処理するオンラインアルゴリズムである必要があります。
Fluxboxウィンドウ配置戦略には、エミュレートしたい3つのバイナリオプションがあります。
Windowsは水平行または垂直列を作成します(潜在的に)
ウィンドウは左から右または右から左に配置されます
ウィンドウは上から下または下から上に配置されます
ターゲットアルゴリズムとウィンドウ配置アルゴリズムの違い
座標単位はピクセルではありません。ブロックが配置されるグリッドは128x128ユニットになります。さらに、配置領域は、グリッド内に配置された境界領域によってさらに縮小される場合があります。
なぜアルゴリズムが問題なのですか?
オーディオアプリケーションのリアルタイムスレッドの期限まで動作する必要があります。
現時点では、高速アルゴリズムの取得のみに関心があります。リアルタイムスレッドの影響と、それがもたらすプログラミングのすべてのハードルについては気にしないでください。
また、アルゴリズムが別のウィンドウと重なるウィンドウを配置することはありませんが、ユーザーは特定のタイプのブロックを配置および移動でき、重なるウィンドウが存在します。ウィンドウや空き領域を格納するために使用されるデータ構造は、この重複を処理できる必要があります。
これまでのところ、ルーズなプロトタイプを作成した2つの選択肢があります。
1)Fluxbox配置アルゴリズムのコードへの移植。
これに伴う問題は、アルゴリズムを使用して256ブロックの最悪のシナリオを配置しようとすると、クライアント(私のプログラム)がオーディオサーバー( JACK )から追い出されることです。このアルゴリズムは、256番目のウィンドウを配置するときにすでに配置されているブロックのリストの14000を超える完全な(線形)スキャンを実行します。
これをデモンストレーションするために、text_boxer-0.0.2.tar.bz2というプログラムを作成しました。このプログラムは、入力としてテキストファイルを受け取り、ASCIIボックス内に配置します。make
それを構築するために発行します。コマンドラインオプションのリストには、少し不親切です--help
(またはその他の無効なオプション)を使用してください。オプションを使用してテキストファイルを指定する必要があります。
2)私の代替アプローチ。
部分的にのみ実装されているこのアプローチでは、長方形の空き未使用スペースの各領域のデータ構造を使用します(ウィンドウのリストは完全に分離でき、このアルゴリズムのテストには必要ありません)。データ構造は、二重にリンクされたリスト(ソートされた挿入を含む)のノードとして機能し、左上隅の座標、および幅と高さを含みます。
さらに、各ブロックデータ構造には、4つの側面のそれぞれですぐ隣接する(接触する)各ブロックに接続する4つのリンクも含まれています。
重要なルール:各ブロックは、片側に1つのブロックのみと接触できます。これは、未使用の空きスペースを保存するアルゴリズムの方法に固有のルールであり、実際のウィンドウが互いに接触する可能性がある数には影響しません。
このアプローチの問題は、非常に複雑であるということです。1)ブロックの1つのコーナーからスペースを削除し、2)隣接するブロックを分割して、重要なルールを順守するという単純なケースを実装しました。
削除するスペースがボックスの列または行内でのみ検出される、それほど単純ではないケースは、部分的にしか実装されていません-削除するブロックの1つが幅(つまり列)または高さ(つまり行)その後、問題が発生します。また、これは幅1ボックスの列と、高さ1ボックスの行のみをチェックするという事実についても言及しないでください。
私はこのアルゴリズムをCで実装しました-このプロジェクトで使用している言語です(私は数年間C ++を使用しておらず、C開発にすべての注意を向けた後、それを使用するのは不快です、それは趣味です)。実装は700行以上のコードです(多くの空白行、中括弧行、コメントなどを含みます)。実装は、水平行+左右+上下配置戦略でのみ機能します。
したがって、この+700行のコードを他の7つの配置戦略オプションで機能させる方法を追加するか、これらの+700行のコードを他の7つのオプションで複製する必要があります。これらはどちらも魅力的ではありません。1つ目は既存のコードが十分に複雑であるため、2つ目は肥大化のためです。
機能が不足しているため、アルゴリズムはリアルタイムの最悪のシナリオで使用できる段階にさえありません。そのため、最初のアプローチよりも実際にパフォーマンスが良いか悪いかはわかりません。
このアルゴリズムのC実装の現在の状態はfreespace.cです。私はこれgcc -O0 -ggdb freespace.c
をビルドして、少なくとも124x60文字のxtermサイズで実行するために使用します。
他には何があるの?
私はざっと目を通し、割引しました:
ビンパッキングアルゴリズム:最適な適合に重点を置いているため、このアルゴリズムの要件と一致しません。
再帰的二分配置アルゴリズム:有望に聞こえますが、これらは回路設計用です。それらの重点は、最適なワイヤ長です。
これらの両方、特に後者では、アルゴリズムが開始する前に、配置/パックされるすべての要素がわかっています。
これについてどう思いますか?どのようにアプローチしますか?他にどのようなアルゴリズムを検討する必要がありますか?または、コンピュータサイエンス/ソフトウェアエンジニアリングを勉強したことがないので、どのような概念を調べればよいでしょうか。
さらに情報が必要な場合は、コメントで質問してください。
この質問をして以来、さらなるアイデアが生まれました
- 私の「代替アルゴリズム」と、配置する大きなウィンドウが空きスペースのいくつかのブロックをカバーするかどうかを識別するための空間ハッシュマップのいくつかの組み合わせ。