2

ポイントの配列を三角形分割する JS ライブラリをテストしています (三角形の配列を返します)。うまく機能しているように見えますが、MooTools を追加すると (このライブラリは MooTools を使用してより大きなプロジェクトに統合されるため、必要になります)動作を停止します。:(

つまり、ヘッダーに MooTools を追加するだけで (domready イベントを追加する必要はありません)、エラーが発生します...

Uncaught TypeError: Object function (){
            return lower;
        } has no method 'InCircumcircle'

MooTools の代わりに JQuery を追加してみましたが、domready ブロック内でも完全に動作します...そのため、mootools の何が問題なのかわかりません... (MooTools は、このライブラリと互換性のない JS オブジェクト モデルの何かを変更する可能性があります?)

私はそれを解決する方法がわかりません.または多分私は初心者であり、それは私が見ることができない小さな詳細です... :)

JSFiddle で小さなデモを用意しました。ここで自分で表示できます:
http://jsfiddle.net/6KcW9/

ライブラリdelauny.jsは、リソースの管理セクションにリンクされています。

この単純なコードをそのまま実行すると、要素の配列がコンソールに出力されることがわかります... フレームワーク セクションに MooTools を追加して、もう一度実行してみてください。
ヘルプ/手がかり/どんなものでも大歓迎です...

4

2 に答える 2

1

彼らのソースコードを見たことがありますか?

http://www.travellermap.com/tmp/delaunay.js

MooToolsは典型的なフレームワークです。つまり、ネイティブプロトタイプにメソッドを追加し、繰り返し処理することができます。

var i;
for( i in vertices )
{
    // NOTE: This is O(n^2) - can be optimized by sorting vertices
    // along the x-axis and only considering triangles that have 
    // potentially overlapping circumcircles

    var vertex = vertices[i];
    AddVertex( vertex, triangles );
}

頂点が配列であるこのようなコードは完全に壊れます。for (var in object)コンストラクトは、オブジェクトのプロパティを反復処理する方法です。代わりに、配列が渡されます(jsのほとんどすべてのように-オブジェクトですが、配列のようなプロパティがあります)。

var g_vertices = [];
for( var i = 0; i < 50; i++ ) {
    g_vertices.push( new Vertex( Math.random() * 350 + 25, Math.random() * 250 + 25 ) );
}
// var triangles = Triangulate( g_vertices );
// console.log(triangles);

console.log(g_vertices);

for (var i in g_vertices) {
    console.log(i);
}

ページにmootoolsを追加すると、その結果は次のようになります。

0, 1, 2 .... 49, $family, $constructor, each, clone, clean, invoke ... etc.

基本的に、あなたは彼らのライブラリを修正する必要があります。hasOwnPropertycheck-> -を使用if (g_vertices.hasOwnProperty(i)) ...するか、適切なfor配列イテレータを使用するか、whileまたはArray.forEach、好きなように使用します。

次のような代替案を見つけてください:https ://github.com/sokeroner/Delaunay-Triangulation-これはより良く、よりモジュール化されているようです。

于 2012-08-04T10:55:56.720 に答える
0

すべてのものをグローバル名前空間に追加しているため、おそらく問題が発生します。

グローバル名前空間を汚染しないように、コードをモジュールでラップする必要があります。

于 2012-08-03T19:24:33.863 に答える