2017-01-23 3 views
1

私にはナッツを動かす質問があります! :)私は昼と夜に今作業している:) :)処理3 - PVectorパスオフセット//内向き/外向きポリゴンオフセット

私の目標は何ですか?

外側を2とします。内部に2つ。イラストレーターで、それは簡単です:)これまで

私のアプローチ

  1. 作業を時計回り。 X & Yを計算するために使用し三角法
  2. P1 & P2との間の角度を取得し、YはP1 & P2にオフセットX &を追加
  3. を相殺しました。
float getAngle = (atan((P1.y-P2.y)/(P1.x-p2.x))) * (180/PI) ; 

2.

// (COS(angle) = (adjacent side)/(hypotenuse)) || 2 = 6/3 
// (COS(angle) * (hypotenuse) = (adjacent side)  || 2 * 3 = 6 

// (SIN(angle) = (opposite side)/(hypotenuse)) || 2 = 6/3 
// (SIN(angle) * (hypotenuse) = (opposite side)  || 2 * 3 = 6 

私の問題

私はあなたから何が好きですか?

  • これを行う論理/式はありますか?
  • これは既にライブラリがありますか?

私は最初の/中心線の外に線のオフセットを維持する方法を頭に入れてはいけません。

答えて

0

頂点を拡大縮小してもらえますか?

void setup(){ 
    size(400,400); 

    PVector[] originalPath = randomPath(7,100); 

    PVector[] insetPath = scalePoints(originalPath,0.75); 
    PVector[] outsetPath = scalePoints(originalPath,1.25); 

    background(255); 
    noFill(); 
    translate(width * .5, height * .5); 
    stroke(0,192,0); 
    drawPath(originalPath); 
    stroke(192,0,0); 
    drawPath(insetPath); 
    stroke(0,0,192); 
    drawPath(outsetPath); 

    fill(0); 
    text("original path",originalPath[0].x,originalPath[0].y); 
    text("inset path",insetPath[1].x,insetPath[1].y); 
    text("outset path",outsetPath[2].x,outsetPath[2].y); 
    text("click\nto\nreset",0,0); 
} 

void drawPath(PVector[] pts){ 
    beginShape(); 
    for(PVector p : pts) vertex(p.x,p.y); 
    endShape(CLOSE); 
} 

PVector[] scalePoints(PVector[] pts,float scale){ 
    int numPoints = pts.length; 
    PVector[] result = new PVector[numPoints]; 
    for(int i = 0 ; i < numPoints; i++){ 
    result[i] = pts[i].get(); 
    result[i].mult(scale); 
    } 
    return result; 
} 

PVector[] randomPath(int numPoints,float r){ 
    PVector[] result = new PVector[numPoints]; 
    float ai = TWO_PI/numPoints; 
    for(int i = 0 ; i < numPoints; i++){ 
    float radius = random(r-r*.25,r+r*.25); 
    result[i] = new PVector(cos(ai * i) * radius, sin(ai * i) * radius); 
    } 
    return result; 
} 

void mousePressed(){ 
    setup(); 
} 
void draw(){} 
+0

cr * p、非常に遅れて申し訳ありません。私はどういうわけか通知を受けていません。 それでも、ありがとう!私はそれを調べるつもりです。期待しているように見える!! – Tim

関連する問題