微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

处理中,简单的“光线追踪”引擎“目标VM初始化失败”

如何解决处理中,简单的“光线追踪”引擎“目标VM初始化失败”

我已经尝试修复此问题已有一段时间了,但是它似乎没有用。 “无法运行草图(目标VM初始化失败)。”

我将在下面写下完整的代码

在draw()中,有三个for循环。

for(int i = 0; i<objectAmount; i++) {
  circles[i].drawObj();
}

一个创建圆,而第二个嵌套圆负责碰撞并绘制线条;

for(int i = 0; i<rayAmount; i++) {
  rays[i].update();
  for(int j = 0; j<objectAmount; j++) {
    rays[i].collide(circles[j]);
  }
  line(rays[i].xPos,rays[i].yPos,rays[i].xEnd,rays[i].yEnd);
}

.collide指向'ray'上的点并移近圆,直到达到某个值为止,在该处标记线条的末端,然后由line()函数使用该线条将其绘制到圆上。 / p>

由于某种原因,当我实现.collide函数时,一切都会停止工作,除非我将光线数量设置为一个在这种情况下将不会出现光线,但是圆的生成会随之而来很好。

int rayAmount = 45;
int angleCorrect = 360/rayAmount;
int objectAmount = 10;
Ray[] rays = new Ray[rayAmount];
Object[] circles = new Object[objectAmount];

void setup() {
  size(600,400,P2D);
  
  for(int i = 0; i<rayAmount; i++) {
    rays[i] = new Ray(i*angleCorrect);
  }
  for(int i = 0; i<objectAmount; i++) {
    circles[i] = new Object(random(0,600),random(0,400),random(20,100));
  }
}

void draw() {
  background(255);
  stroke(100);
  
  for(int i = 0; i<objectAmount; i++) {
    circles[i].drawObj();
  }
  for(int i = 0; i<rayAmount; i++) {
    rays[i].update();
    for(int j = 0; j<objectAmount; j++) {
      rays[i].collide(circles[j]);
    }
    line(rays[i].xPos,rays[i].yEnd);
  }
}



class Ray {
  float xPos,yPos,Angle,xEnd,yEnd;
  
  Ray(float angle) {
    xPos = mouseX;
    yPos = mouseY;
    Angle = angle;
  }
  
  void update() {
    xPos = mouseX;
    yPos = mouseY;
    
    //xEnd = xPos + 100 * cos(radians(Angle));
    //yEnd = yPos + 100 * sin(radians(Angle));
  }
  
  void collide(Object other) {
    float newXEnd = this.xEnd;
    float newYEnd = this.yEnd;
    
    float distToObject = sqrt(pow(other.xPos-this.xPos,2) + pow(other.yPos-this.yPos,2));
    while(distToObject > 1) {
      newXEnd = newXEnd + distToObject * cos(radians(Angle));
      newYEnd = newYEnd + distToObject * sin(radians(Angle));
      
      distToObject = sqrt(pow(other.xPos-newXEnd,2) + pow(other.yPos-newYEnd,2));
    }
    this.xEnd = newXEnd;
    this.yEnd = newYEnd;
  }
}

class Object {
  float xPos,radius;
  
  Object(float x,float y,float r) {
    xPos = x;
    yPos = y;
    radius = r;
  }
  
  
  void drawObj() {
    stroke(100);
    circle(xPos,radius);    
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。