javascriptでページ内オブジェクトの座標を並び替える方法
- javascriptでページ内のオブジェクトの座標を左上から右下の順に並び替えるためには、どのような関数を作成すれば良いのでしょうか?具体的な座標情報や並び替えた結果の表示方法など詳細を教えてください。
- また、座標情報が与えられた場合、それを値の大小に基づいて並び替える方法も知りたいです。具体的なソートアルゴリズムやコードの例を教えてください。
- アルゴリズムやコードの解説に加えて、効率的な方法や注意点なども教えていただけるとありがたいです。
- ベストアンサー
ページ内オブジェクトを左上から順に並び替える
座標の並べ替えの計算について質問させて頂きます。 javascriptで、以下のような座標(左上基点)のリストを、左上から右下の順に並べ替えるためにはどのような関数を作成すれば良いか分からずにこまっています。 var list = [ { id : 0, x :138.313077609396, y :183.402580877775 }, { id : 1, x :15.0606060605741, y :138.374 }, { id : 2, x :15.0606060605741, y :228.41 }, { id : 3, x :138.312606060574, y :228.41 }, { id : 4, x :76.6868418349849, y :228.41 }, { id : 5, x :76.6868418349849, y :183.392 }, { id : 6, x :15.0860776093956, y :183.367 }, { id : 7, x :138.312606060574, y :138.374 }, { id : 8, x :76.6868418349849, y :138.374 }, { id : 9, x :15.0303030302711, y :15.030303030303 }, { id : 10, x :138.373999999968, y :53.2886884952961 } ]; □1□ | □2□ | □3□ | □4□ □5□ | □6□ | □7□ | □8□ □9□ | □10□ | □11□ | □12□ … といった順に並べ替えたいのです。 詳しい方、いらっしゃいましたら、ご教示のほど、宜しくお願い申し上げます。
- chiku-san
- お礼率67% (51/76)
- JavaScript
- 回答数5
- ありがとう数9
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
まあ不可能だと思ったほうがいいです。 例えば1がもし上の方にも伸びていれば1->6->2となるでしょうし、 現状でも1->6->2と絶対ならない理由はないでしょう。 それこそ、2は画像を含んでいるので目が移りやすいとかそういったこともあるでしょう。 ですのでもう単純にy座標だけで決めたほうがいいです。 そしてy座標が同じならxを見ます。 ただしlistはy座標が微妙にずれているので注意がいります。
その他の回答 (4)
- sanzero
- ベストアンサー率56% (58/102)
プログラムを考えないという方法もあります。要件に合致するかどうかはわかりませんが下記のようなプラグインがあります。 http://blog.shuffleee.com/1793/ http://on-ze.com/archives/1929 その他 http://matome.naver.jp/odai/2136089272724471701
お礼
ありがとうございます! pluginで対応ですね。ありがとうございます。 今回の要件ですが、このような計算によってランダムな雰囲気に配置された画像の座標を全部取得して、人が目で追うような右から左への順でに並べ替えて、いろいろやりたいという感じです。 ご教示頂いたプラグインの中を見て、計算方法を確認しつつアルゴリズムを理解しつつ、再度考えたいと思います! ありがとうございました。
- b0a0a
- ベストアンサー率49% (156/313)
これは座標だけで決められるものではありません。 例えばサンプル画像でもしも画像9の高さが極端に小さく、 9の底が8の頭よりも上であれば、8と9は逆転するでしょう。 他にもそのlist配列は並び替えるのに当たって諸問題がいくつかありそうに見えます。
お礼
ありがとうございます!確かに…ご指摘の通りですね…。 こういう場合は、左上座標のリストだけでは要件通りのソートはできないということですね…。 一般的にこのような要件の場合、どのようなリストを作成してソートを行うのでしょうか…。 かなり複雑な計算になるのでしょうか。 javascriptの学習を始めたばかりのため、見当もつきません…。 ヒントだけでもご教示頂けましたら幸いです。
- b0a0a
- ベストアンサー率49% (156/313)
そもそも左上とは? あるものと、それに対してyが0.1低く、xが10高いものはどちらを前とするのですか?
補足
>あるものと、それに対してyが0.1低く、xが10高いものはどちらを前とする たしかに、ここを明確にしないとソートできませんね…。ありがとうございます! アメコミのコマを目で追うようにソートしたいのですが、こういう場合は「あるもの」が前になります。 ですので実際には「アメコミのコマを目で追う」とは、異なる要件であることが分かりました…申し訳ございません…涙。 そして、いろいろと質問の仕方が酷いことを実感し、以下にロケーションを画像イメージで用意いたしました。 これはピンタレストのトップですが、ちょうど、ページ全体の左上が基点0,0で、それぞれのブロックの左上の座標がランダムに格納されているデータをイメージして頂ければと存じます。 これを四角で振った連順番のように並べて行きたいのです。 http://nandemo.wpblog.jp/wp-content/mydata/scs.png
- Hanagefactory
- ベストアンサー率58% (42/72)
実際に並び替えたい部分は実行していないので座標が、どこにあるかは視覚的には認識していませんが、 xとyはそれぞれ横と縦だと思います。 対して左上というのは座標にするには両方必要です。 ここで必要なのは要件。 どのように並び替えたいか。 左上から並べたように見えるという事はどういう事かを定義する必要があります。 一つの案としては 「左上座標0,0との距離が近い順」 それで並び替えはできるかと思います。
お礼
ありがとうございます! なるほど、距離を追加して比較するとか、いろいろ方法ありそうですね! 良いのですね、早速やってみます!
補足
> どのように並び替えたいか。左上から並べたように見えるという事はどういう事かを定義する必要があります。 ありがとうございます。 並び替えは、左上をx:0,y:0とした場合に、以下の様に配列をソートしたいと考えています。 □1□ | □2□ | □3□ | □4□ □5□ | □6□ | □7□ | □8□ □9□ | □10□ | □11□ | □12□ 左上から、左から右まで順番に走査して、一段下がって、また走査してといった感じで、丁度アメリカンコミックのコマを目で追う順番にソートしたいと考えています。
関連するQ&A
- objectの座標が取れない。
JavaScriptを利用して、画面に仕込んだタグをポップアップのように 呼び出したいと思っています。 以下、概略ですが <div id ="test1" style="display:none;">テスト</div> <a href="javascript:balOpen(this,number)">呼び出し</a> 以下js function balOpen(obj,number) { document.getElementById('test' + number).style.display = 'block'; var positionX; var positionY; positionX = getLocation(obj, 'X'); positionY = getLocation(obj, 'Y'); } 画面をスクロールした際でも、画面中央に出したいので、座標を見て tes1のleftとtopを調整したいと思っています。 しかし、上記のような書き方をしても、X、Yの座標が取れず困っています。 何か良いやり方があれば教えていただけないでしょうか。 宜しくお願いします。
- ベストアンサー
- JavaScript
- javascriptでオブジェクトのメソッドを使う
JavaScriptでnewでオブジェクト化したクラス(?)のメソッド、フィールドを利用する方法を教えて下さい。 javascriptにもオブジェクト化という考え方があると聞いたのですが、 例えば、Javaでいうsetter getterのようなメソッドを作り、使用することはできるのでしょうか? 下記のようなコードを実行したところ Uncaught TypeError: Object #<mousePosi> has no method 'setPara' というエラーが出てしまい、setParaというメソッドはない。と言われてしまいます。 しかし、mousePosi()をオブジェクト化することはできているようなので、 setParaとgetParaを使えるのではないかとおもいました。 どなたかアドバイス下さい。お願いします。 ------------------------------------------------------------------------------------------------- (function LineMain() { console.log("マウスの位置座標を表示"); // console.log("X座標=" + mymouse.x + ",Y座標=" + mymouse.y); //マウスムーブでeventControlを呼び出し addEventListener("mousemove", eventControl, false); function eventControl(event) { var event = event; var myMousePosi = new mousePosi(); myMousePosi.setPara(event); // console.log("X座標=" + obj.getMouse().x + ",Y座標=" + obj.getMouse().y); } function mousePosi() { var paraMouse = { x : 0, y : 0 }; function setPara(event) { this.paraMouse.x = event.x; this.paraMouse.y = event.y; } function getPara() { return this.paraMouse; } } })();
- ベストアンサー
- JavaScript
- 座標を指定して画像を表示する
こんばんは。 画像の左上を基点にし、XとY座標を指定して画像を表示する方法はありませんか? できればHTMLかJAVAなんかでしたいです。
- ベストアンサー
- ホームページ作成ソフト
- Java言語プログラミングについて質問です
次の問題をどう組んだらいいかわかりません。教えてください。 問.2次元上の円と長方形を表すデータファイルが与えられたとき、以下の処理を行うプログラムを作成せよ。ただし、長方形は必ず座標軸に並行変を持つとする。 1.全図形の合計面積を表示せよ 2.一番免責の大きい図形データを表示せよ 3.周の長さ順に図形データを表示せよ 4.重なり合ってるすべての円のペアを列挙せよ 5.重なり合っているすべての図形のペアも列挙せよ 図形データのフォーマットは以下のようなCSV形式で与えられているとする。 円 ID、1、中心点のX座標(double型)、中心点のY座標(double型)、半径(double型) 長方形 ID、2、左上の点のX座標(double型)、左上の点のY座標(double型)、右下の点のX座標(double型)、右下の点のY座標(double型) ただし、IDは図形間でユニークな整数値であるとする。 図形データの例 1. 1, 50, 0, 50, 0, 50.0 2. 2, -100, 0, 100, 0, 0, 0, 0, 0 3. 1, 0, 0, 0, 0, 10.0 4. 1, 50, 0, 0, 0, 30.0 5. 2, -75, 0, 75.0, -25.0, 25.0 まだ自分に知識がないので、この問題をどう組んだらいいかわかりません。教えてください。よろしくお願いします。解説とソースをお願いします。
- 締切済み
- Java
- Flashでのインスタンスの座標について
こんばんは。 一つflashのインスタンスの座標について質問なのですが、 試しに actionscriptで _root.attachMovie("1","2",1); _root[2]._x = 300; という動作をさせたところ、_root[2]のx座標を300に設定していてもステージのx=300(左上を0,0とした座標)の位置と違う位置に表示されてしまいます。 これは何故このような現象がおきてしまうのでしょうか?ステージのx,yとインスタンスのx,yは基点が違うのでしょうか?ご教授頂ければ幸いです。
- ベストアンサー
- グラフィックソフト
- 二次関数の通過領域
座標平面状にX=-1の直線を考えます。 X軸と直線X=-1で4つに分けられた領域の右上をA左上をB左下をC右下をDとします。 二次関数Y=X^2+aX+1がAとBを通りCとDを通らないときaの範囲を求めよ という問題なのですが、解答を読んでも納得できない部分がありました。 解答では判別式が負もしくは軸(X=-a/2)がX>0にあることが条件である と書かれていて答えはa≦2となっています。 二次関数を平方完成すると Y=(X+a/2)^2+1-a^2/4 となり頂点のY座標は1-a^2/4となります。 ここで例えばa=-5を代入すると頂点のY座標は負となりCかDを通ると考え納得できませんでした。 どこで間違えているのかご指摘いただけないでしょうか?
- ベストアンサー
- 数学・算数
- Perlでcsvファイルを読み込んで計算する方法(初心者です)
csvファイルに以下のようなデータが入っています。 ID,X座標,Y座標 0,1.22,3.42 1,3.24,4.52 2,5.34,7.87 (こういうのがID1000までずっと続きます) このデータから一行ずつ,Y座標-X座標を計算させて出力したいです。 とても困っているので解答お願いします。
- ベストアンサー
- Perl
- インラインフレーム内の変数を親ページから呼び出す
インラインフレーム内のマウス位置を↓のjavascriptコードで取得しているのですが、親ページのjavascriptの関数で使用したいです。どのようにインラインフレーム内の変数を親ページから呼び出して、利用すればよいのでしょうか? var x, y; window.addEventListener("DOMContentLoaded", function(){ window.document.onmousemove = function(e){ x = getMousePosition(e).x; } },false); function getMousePosition(e) { var obj = new Object(); if(e) { obj.x = e.pageX; obj.y = e.pageY; } else { obj.x = event.x + document.body.scrollLeft; obj.y = event.y + document.body.scrollTop; } return obj; }
- 締切済み
- JavaScript
- UWSCでの関数定義は?
只今UWSCにて画像クリックを自動化しようとしているのですが、CHKIMGとBTNを多用するため、関数にて引数に 画像のディレクトリ・検索範囲のx座標1・y座標1・x座標2・y座標2 を入れて呼び出したいと思っています。 説明には PROCEDURE 関数名( 引数, Var 引数, 引数[], Var 引数[][], 引数=定数, .... ) 処理 FEND と載っていたのですが、関数を作成するとメインの動作をしなくなってしまいました。 UWSCではどのように関数の定義と呼び出しをすればいいのでしょうか。 初歩的な質問で申し訳ないのですが、分かる方がいらっしゃったらお願いします。
- ベストアンサー
- その他(プログラミング・開発)
お礼
ありがとうございます! なるほど、ということは、はじめにページ全体のY座標を100分割くらいにしてしまって、似たようなY座標を全部同じにしてしまってから、Y座標が同じならxを見るという感じでやれば、なんとなく、そんな感じになりそうですかね。 こちらもちょっと試してみたいと思います! ありがとうございました!