2017-03-08 19 views
1

.pdeファイルをp5.jsに翻訳する途中ですが、PVector[]コマンドで問題が発生したようです。私のコードに相当するものは、p5.jsとして何が使えますか?どんな提案も非常に役に立ちます!ここでPVector []をp5.jsに翻訳

は私のコードです:

var state = 0; 
var scale = 100; 
var phi = (1 + sqrt(5))/2.0; 
var radious = sqrt(sq(1) + sq(phi)); 
ArrayList<Triangle> triangles; 

function setup() { 
    createCanvas(500, 500, WEBGL); 
    P5.vector[] vertices = { 
    new P5.vector(0, 1, phi), 
     new P5.vector(0, -1, phi), 
     new P5.vector(0, -1, -phi), 
     new P5.vector(0, 1, -phi), 
     new P5.vector(phi, 0, 1), 
     new P5.vector(-phi, 0, 1), 
     new P5.vector(-phi, 0, -1), 
     new P5.vector(phi, 0, -1), 
     new P5.vector(1, phi, 0), 
     new P5.vector(-1, phi, 0), 
     new P5.vector(-1, -phi, 0), 
     new P5.vector(1, -phi, 0) 
    }; 
    triangles = new ArrayList <Triangle>(); 
    triangles.add(new Triangle(vertices[0], vertices[8], vertices[9])); 
    triangles.add(new Triangle(vertices[0], vertices[9], vertices[5])); 
    triangles.add(new Triangle(vertices[0], vertices[5], vertices[1])); 
    triangles.add(new Triangle(vertices[0], vertices[1], vertices[4])); 
    triangles.add(new Triangle(vertices[0], vertices[4], vertices[8])); 
    triangles.add(new Triangle(vertices[1], vertices[5], vertices[10])); 
    triangles.add(new Triangle(vertices[1], vertices[10], vertices[11])); 
    triangles.add(new Triangle(vertices[1], vertices[11], vertices[4])); 
    triangles.add(new Triangle(vertices[2], vertices[3], vertices[7])); 
    triangles.add(new Triangle(vertices[2], vertices[7], vertices[11])); 
    triangles.add(new Triangle(vertices[2], vertices[11], vertices[10])); 
    triangles.add(new Triangle(vertices[2], vertices[10], vertices[6])); 
    triangles.add(new Triangle(vertices[2], vertices[6], vertices[3])); 
    triangles.add(new Triangle(vertices[3], vertices[6], vertices[9])); 
    triangles.add(new Triangle(vertices[3], vertices[9], vertices[8])); 
    triangles.add(new Triangle(vertices[3], vertices[8], vertices[7])); 
    triangles.add(new Triangle(vertices[4], vertices[11], vertices[7])); 
    triangles.add(new Triangle(vertices[4], vertices[7], vertices[8])); 
    triangles.add(new Triangle(vertices[5], vertices[9], vertices[6])); 
    triangles.add(new Triangle(vertices[5], vertices[6], vertices[10])); 

    for (var i = 0; i < 3; i++) { 
    ArrayList <Triangle> nextTriangles = new ArrayList <Triangle>(); 
    for (Triangle t: triangles) { 
     nextTriangles.addAll(t.divide()); 
    } 
    triangles = nextTriangles; 
    } 

} 

function mousePressed() { 
    state++; 
    if (state == 3) { 
    state = 0; 
    } 
} 

function draw() { 
    background(0); 
    translate(width/2, height/2); 
    rotateX(frameCount * 0.001); 
    rotateY(frameCount * 0.002); 
    rotateZ(frameCount * 0.003); 
    for (Triangle t: triangles) { 
    t.display(); 
    } 
    println(triangles.size()); 
} 

class Triangle { 

    P5.vector[] vertices; 

    Triangle(P5.vector v0, P5.vector v1, P5.vector v2) { 
    vertices = new P5.vector[3]; 
    vertices[0] = v0; 
    vertices[1] = v1; 
    vertices[2] = v2; 
    } 

    function display() { 
    switch (state) { 
     case 0: 
     stroke(255); 
     fill(128); 
     beginShape(); 
     for (var i = 0; i < 3; i++) { 
      vertex(vertices[i].x * scale, vertices[i].y * scale, vertices[i].z * scale); 
     } 
     endShape(CLOSE); 
     break; 
     case 1: 
     stroke(255); 
     noFill(); 
     beginShape(); 
     for (var i = 0; i < 3; i++) { 
      vertex(vertices[i].x * scale, vertices[i].y * scale, vertices[i].z * scale); 
     } 
     endShape(CLOSE); 
     break; 
     case 2: 
     noFill(); 
     stroke(255); 
     for (var i = 0; i < 3; i++) { 
      point(vertices[i].x * scale, vertices[i].y * scale, vertices[i].z * scale); 
     } 
     break; 
    } 
    } 

    ArrayList <Triangle> divide() { 
    P5.vector[] midpoints = new P5.vector[3]; 
    for (var i = 0; i < 3; i++) { 
     var j = i != 2 ? i + 1 : 0; 
     P5.vector m = P5.vector.lerp(vertices[i], vertices[j], 0.5); 
     m.normalize(); 
     m.mult(radious); 
     midpoints[i] = m; 
    } 
    ArrayList <Triangle> triangles = new ArrayList <Triangle>(); 

    triangles.add(new Triangle(vertices[0], midpoints[0], midpoints[2])); 
    triangles.add(new Triangle(vertices[1], midpoints[1], midpoints[0])); 
    triangles.add(new Triangle(vertices[2], midpoints[2], midpoints[1])); 
    triangles.add(new Triangle(midpoints[0], midpoints[1], midpoints[2])); 
    return triangles; 
    } 
} 

私はp5.jsPVector[]の私の用途に変換することができますどのように?

答えて

1

私があなただったら、基本的な置き換えを行うことでコードを翻訳しようとはしませんでした。これはあなたがしているようなものです。

代わりに、それが何をしているのかを理解し、英語で説明し、その英語の記述をとり、それを他の言語で実装することによって、プログラムを「分解」する必要があります。それはあなたが発見しているテキストを通過して置き換えるほど簡単ではありません。

あなたが指摘したことは、単純にP5.vectorインスタンスの配列を作成しているということです。 JavaScriptにこれを変換するには、あなたはJavaScriptで配列を作成したい方法を見て:

var myArray = [thingOne, thingTwo, thingThree]; 

おそらくあなたはvertices配列と類似した何かをしたいと思います。しかし、私が言ったように、取っているアプローチは、あなたに頭痛の束を与えるつもりです。コードを直接翻訳することはできません。あなたはそれが何をしているのかを解体し、ターゲット言語のロジックを再実装する必要があります。

+0

私はあなたがそうかもしれないと考えていました。私はおそらく、特定の頂点を持つネストされた配列を使うほうが良いでしょう。 – ASwedler

+0

@ASwedlerなぜ入れ子配列が必要ですか? –