第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

僅在使用 fill() 時(shí)處理草圖拋出 java.lang.AssertionError

僅在使用 fill() 時(shí)處理草圖拋出 java.lang.AssertionError

慕娘9325324 2023-03-09 17:09:58
該研究項(xiàng)目是關(guān)于使用幾何庫(kù)從 .ttf 類型的字體文件中獲取形狀時(shí)沿貝塞爾曲線(遞歸多項(xiàng)式形式)處理文本。(它需要數(shù)據(jù)目錄中的 ttf 文件才能運(yùn)行。)目前,草圖填充時(shí)似乎會(huì)拋出錯(cuò)誤(任何顏色);用于代碼繪制字符形狀且貝塞爾曲線長(zhǎng)度小于一定長(zhǎng)度的部分。如果填充(); 未使用,草圖似乎功能正常,沒有任何錯(cuò)誤。目標(biāo)是使用 fill(); 函數(shù)來(lái)無(wú)誤地填充字符。我試過了; 1) 去掉 beginContour();和結(jié)束輪廓();因?yàn)槲艺J(rèn)為它寫得不正確。(我認(rèn)為這是錯(cuò)誤的,因?yàn)橹挥挟?dāng)形狀是字母的內(nèi)側(cè)時(shí)才應(yīng)該繪制輪廓,但目前,它不是第一個(gè)或最后一個(gè)形狀時(shí)繪制輪廓)但是即使未使用輪廓函數(shù)(使用了填充();),草圖也會(huì)拋出錯(cuò)誤。2)認(rèn)為與曲線的長(zhǎng)度有關(guān),所以嘗試在繪制字母的部分添加if語(yǔ)句。到目前為止,我已經(jīng)嘗試使用從 void setup(){} 中的初始字體大小和字符串生成的 RGroup 的寬度,以及貝塞爾曲線的長(zhǎng)度。if 語(yǔ)句中的條件示例如下;-RGroup形狀時(shí)繪制字母' s width is smaller than the length of the curve - 當(dāng)“縮進(jìn)”(計(jì)算曲線上位置的變量)值小于曲線長(zhǎng)度時(shí)繪制字母。(本例使草圖僅在字母位于曲線內(nèi)時(shí)才繪制字母,但仍然出現(xiàn)錯(cuò)誤) - 當(dāng)“縮進(jìn)”(計(jì)算曲線位置的變量)值小于寬度時(shí)繪制字母的RGroup。我看不出問題到底出在哪里,所以我在草圖中分享了整個(gè)代碼,但我用“//*******”標(biāo)記了我認(rèn)為錯(cuò)誤發(fā)生的地方。本研究基于以下鏈接??梢詮囊韵骆溄硬榭磶缀螏?kù)文檔。有時(shí)在加載草圖時(shí)會(huì)發(fā)生錯(cuò)誤。大多數(shù)情況下,它加載正常,但當(dāng)您稍微拖動(dòng)該點(diǎn)時(shí)會(huì)拋出錯(cuò)誤。錯(cuò)誤代碼有時(shí)是指曲線的控制點(diǎn)通過鼠標(biāo)位置更新的點(diǎn),但由于有時(shí)在加載草圖時(shí)也會(huì)發(fā)生錯(cuò)誤,所以我認(rèn)為這不是與更新位置有關(guān)的問題。
查看完整描述

1 回答

?
慕桂英546537

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊

我不認(rèn)為這會(huì)直接回答我的問題,但它確實(shí)阻止了在同時(shí)使用 fill() 和 P2D 渲染器時(shí)發(fā)生的錯(cuò)誤。正如上面 laancelot 所指出的,主要問題確實(shí)似乎與堆棧溢出有關(guān)。所以我用下面兩種方式解決了這個(gè)問題;結(jié)論:直接原因是數(shù)學(xué)公式表達(dá)不佳。


1) 在一個(gè)類中切換 RPoints。-我不認(rèn)為這是錯(cuò)誤發(fā)生的直接原因,因?yàn)樵谥恢貙懘a的這一部分完成的階段,錯(cuò)誤仍然存在。但也許這是問題的一部分。我不知道。


2)重寫代碼表達(dá)公式的部分,以評(píng)估特定點(diǎn)的貝塞爾曲線。- 以前,該公式是通過使用階數(shù)為 n 的貝塞爾曲線的顯式定義得出的。因此,必須為 RPoint 點(diǎn)中的每個(gè)點(diǎn)計(jì)算(更像是制作)公式。正如關(guān)于貝塞爾曲線的維基百科頁(yè)面上提到的,不推薦這種計(jì)算方式。-在修改后的代碼中,用于扭曲文本的公式以多項(xiàng)式形式表示。因此,它能夠在迭代 RPoint 點(diǎn)之前預(yù)先計(jì)算多項(xiàng)式的系數(shù)。這似乎已經(jīng)解決了問題。


我仍然不確定到底是什么導(dǎo)致了這個(gè)問題,為什么它已經(jīng)解決了,我應(yīng)該展示代碼的哪一部分來(lái)向其他人解釋這個(gè)問題,所以我將分享已經(jīng)重寫的整個(gè)代碼。您需要處理、幾何庫(kù)和數(shù)據(jù)文件夾中的 ttf 類型字體文件來(lái)測(cè)試代碼。牽扯到修改版公式的地方我都標(biāo)出來(lái)了。(還是真的很亂。。。)


//n number of points

int num = 4;

//arraylist to store the picked values

ArrayList<cntrlPoint> pt;


//import the geomerative library

import geomerative.*;




//string

String str = "(O_o)/ Oooh";


FloatList X;

FloatList Y;

FloatList SUM;


RClass rc;


void setup() {

  size(1000, 1000, P2D);

  pt = new ArrayList<cntrlPoint>();

  //pick a number of points with random positions

  for (int i=0; i<=num; i++) {

    float x = random(0, width);

    float y = random(0, height);

    pt.add(new cntrlPoint(x, y));

  }


  RG.init(this);

  rc = new RClass();   


  X = new FloatList();

  Y = new FloatList();  

  SUM = new FloatList();

}


void draw() {

  background(255);

  noFill();

  strokeWeight(2);

  drwCntrlPoints();

  drwCurve();

  gtArcLength();

  fill(0,255,0);

  rc.crtPoly(pt);

  rc.drwText();

}


void drwCntrlPoints() {

  //draw points

  beginShape();

  for (int i=0; i<=num; i++) {

    vertex(pt.get(i).x, pt.get(i).y);

  }

  endShape();


  for (int i=0; i<=num; i++) {

    ellipse(pt.get(i).x, pt.get(i).y, 10, 10);

  }

}


void drwCurve() {

  //draw curve

  float curveDetail = 0.01;

  float nfac = 1;

  for (int i=0; i<num; i++) {

    nfac *= (i+1);

  }

  int arcIndex = 0;

  strokeWeight(2);

  beginShape();

  for (float t=0; t<=1; t+=curveDetail) {

    float x = 0;

    float y = 0;

    arcIndex++;

    for (int i=0; i<=num; i++) {


      float coef = 1;

      float kfac = 1;

      float k_nfac = 1;

      for (int k=i; k>0; k--) {

        kfac *= k;

      }

      for (int k=(num-i); k>0; k--) {

        k_nfac *= k;

      }


      coef = nfac/(kfac*k_nfac);


      x += coef*(pow((1-t), num-i)*pow(t, i)*pt.get(i).x);

      y += coef*(pow((1-t), num-i)*pow(t, i)*pt.get(i).y);

    }

    vertex(x, y);

    X.set(arcIndex, x);

    Y.set(arcIndex, y);

  }

  endShape();

}


void gtArcLength() {

  //get arclength by pulling points from a floatlist

  int numberOfDivisions = X.size()-2;

  int maxPoint = numberOfDivisions+1;


  float sum = 0;


  float prevPointX = X.get(0);

  float prevPointY = Y.get(0);


  for (int i=1; i<=maxPoint; i++) {

    float pointX = X.get(i);

    float pointY = Y.get(i);

    sum += dist(pointX, pointY, prevPointX, prevPointY);

    SUM.set(i-1, sum);

    prevPointX = pointX;

    prevPointY = pointY;

  }

}


//*******factorial

int fact(int fa){

  if(fa==1){

    return 1;

  }

  if(fa==0){

    return 1;

  }

  else{

    return fa*fact(fa-1);

  }

}

//********************


int IndexOfLargestValueSmallerThan(float _targetArcLength) {

  int index = 0;

  for (int i=0; i<SUM.size()-1; i++) {

    if (SUM.get(i)<=_targetArcLength) {

      index = i;

    }

  }

  return index;

}


void mouseDragged() {

  int which = -1;

  if ((mouseX<width)&&(mouseX>0)&&(mouseY<height)&&(mouseY>0)) {

    for (int i=0; i<=num; i++) {

      if (dist(mouseX, mouseY, pt.get(i).x, pt.get(i).y)<80) {

        which = i;

      }

    }

    if (which>-1) {

      pt.get(which).update(mouseX, mouseY);

    }

  }

}


class RClass {

  //get ttf file

  //create rfont

  RFont fnt;

  //turn rfont to rgroup to get points

  RGroup rg;

  //going to get point in path, so that the characters in the string can be seperated

  RPoint [][]rp;


  //floatlist to store coefficients

  FloatList Cx;

  FloatList Cy;


  RClass() {

    fnt = new RFont("Zapfino.ttf", 100);

    rg = fnt.toGroup(str);

    rp = rg.getPointsInPaths();


    //RCommand.setSegmentAngle(random(0,HALF_PI)); 

    //RCommand.setSegmentator(RCommand.ADAPTATIVE);

    RCommand.setSegmentLength(3); 

    RCommand.setSegmentator(RCommand.UNIFORMLENGTH);


    Cx = new FloatList();

    Cy = new FloatList();

  }


  //**********************************here

  void crtPoly(ArrayList<cntrlPoint> _pt){

    float ptsize = _pt.size();

    for(int j=0; j<ptsize; j++){

      float coefx = 0;

      float coefy = 0;

      float pi = 1;

      float sigx = 0;

      float sigy = 0;

      for(int m=0; m<=j-1; m++){

        pi *= (ptsize-1-m);

      }

      for(int i=0; i<=j; i++){

        sigx += (pow(-1,i+j)*pt.get(i).x)/(fact(i)*fact(j-i));

        sigy += (pow(-1,i+j)*pt.get(i).y)/(fact(i)*fact(j-i));

      }

      coefx = pi*sigx;

      coefy = pi*sigy;

      Cx.set(j,coefx);

      Cy.set(j,coefy);

    }

  }

  //**************************************


  void drwText() {

    float indent = SUM.get(0);  


    beginShape();       

    for (int i=0; i<rp.length; i++) {

      if(i>0){

        beginContour();

      }

      for (int j=0; j<rp[i].length; j++) {


        float t = 0;


        indent = rp[i][j].x+SUM.get(0);


        float targetArcLength = indent;


        int index = IndexOfLargestValueSmallerThan(targetArcLength);


        if (SUM.get(index)==targetArcLength) {

          t = index/(SUM.size()-1);

        } else {

          float lengthBefore = SUM.get(index);

          float lengthAfter = SUM.get(index+1);

          float segmentLength = lengthAfter - lengthBefore;

          float segmentFraction = (targetArcLength - lengthBefore)/segmentLength;

          t = (index+segmentFraction)/(SUM.size()-1);

        }


        //***************************here

        float x = 0;

        float y = 0;

        float vx = 0;

        float vy = 0;


        for(int l=0; l<=num; l++){

          x += Cx.get(l)*pow(t,l);

          y += Cy.get(l)*pow(t,l);

        }


        for(int l=1; l<=num; l++){

          vx += l*Cx.get(l)*pow(t,l-1);

          vy += l*Cy.get(l)*pow(t,l-1);

        }

        //**************************************


        PVector P = new PVector(x, rp[i][j].y+y);


        PVector ldir = new PVector(P.x-x, P.y-y);



        PVector dir = new PVector(vy, -vx); 

        //

        ldir.rotate(dir.heading()+PI/2);


        vertex(x+ldir.x, y+ldir.y);

      }

      if(i>0&&i<rp.length){

        endContour();

      }

    }

    endShape();

  }

}


class cntrlPoint{

  float x,y;


  cntrlPoint(float _x, float _y){

    x = _x;

    y = _y;

  }


  void update(float _newx, float _newy){    

    x = _newx;

    y = _newy;   

  }


}



查看完整回答
反對(duì) 回復(fù) 2023-03-09
  • 1 回答
  • 0 關(guān)注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)