1

Тема: Processing

Привіт кожному.
Прошу допомоги з виконанням моєї лабораторної роботи(на форумі немає прям теми про Processing).
Предмет обчислювальна геометрія.
Побудувати аксонометричну проекцію куба з вписаними в його грані колами при співвідношенні масштабів kx : ky : kz = 6:5:4
Я щось якось спробував зробити за допомогою додаткових джерел.
Код прикріпив нижче. Наче малює але кола криві. І до кінця не можу зрозуміти яку саме аксометричну модель, почитав їх є декілька. Якщо не важко допоможіть розібратися будь ласка.

void setup() {
  size(400, 400, P3D);
  translate(232, 192, 0);
  rotateY(0.5);
  noFill();
  
  float kx = 6;
  float ky = 5;
  float kz = 4;
  
  float boxSizeX = 160;
  float boxSizeY = boxSizeX * ky / kx;
  float boxSizeZ = boxSizeX * kz / kx;
  
  float radius = min(boxSizeX, min(boxSizeY, boxSizeZ)) / 2;
  
  beginShape(QUADS);
  
  // Front face
  vertex(-boxSizeX/2, -boxSizeY/2, -boxSizeZ/2);
  vertex(boxSizeX/2, -boxSizeY/2, -boxSizeZ/2);
  vertex(boxSizeX/2, boxSizeY/2, -boxSizeZ/2);
  vertex(-boxSizeX/2, boxSizeY/2, -boxSizeZ/2);
  
  // Back face
  vertex(-boxSizeX/2, -boxSizeY/2, boxSizeZ/2);
  vertex(boxSizeX/2, -boxSizeY/2, boxSizeZ/2);
  vertex(boxSizeX/2, boxSizeY/2, boxSizeZ/2);
  vertex(-boxSizeX/2, boxSizeY/2, boxSizeZ/2);
  
  // Top face
  vertex(-boxSizeX/2, -boxSizeY/2, -boxSizeZ/2);
  vertex(boxSizeX/2, -boxSizeY/2, -boxSizeZ/2);
  vertex(boxSizeX/2, -boxSizeY/2, boxSizeZ/2);
  vertex(-boxSizeX/2, -boxSizeY/2, boxSizeZ/2);
  
  // Bottom face
  vertex(-boxSizeX/2, boxSizeY/2, -boxSizeZ/2);
  vertex(boxSizeX/2, boxSizeY/2, -boxSizeZ/2);
  vertex(boxSizeX/2, boxSizeY/2, boxSizeZ/2);
  vertex(-boxSizeX/2, boxSizeY/2, boxSizeZ/2);
  
  // Left face
  vertex(-boxSizeX/2, -boxSizeY/2, -boxSizeZ/2);
  vertex(-boxSizeX/2, boxSizeY/2, -boxSizeZ/2);
  vertex(-boxSizeX/2, boxSizeY/2, boxSizeZ/2);
  vertex(-boxSizeX/2, -boxSizeY/2, boxSizeZ/2);
  
  // Right face
  vertex(boxSizeX/2, -boxSizeY/2, -boxSizeZ/2);
  vertex(boxSizeX/2, boxSizeY/2, -boxSizeZ/2);
  vertex(boxSizeX/2, boxSizeY/2, boxSizeZ/2);
  vertex(boxSizeX/2, -boxSizeY/2, boxSizeZ/2);
  
  endShape();
  
for (int i = 0; i < 4; i++) {
    float x = (i % 2 == 0) ? -boxSizeX/2 + radius : boxSizeX/2 - radius;
    float y = (i < 2) ? -boxSizeY/2 + radius : boxSizeY/2 - radius;
    
    for (float z = -boxSizeZ/2 + radius; z < boxSizeZ/2; z += radius * 2) {
      pushMatrix();
      translate(x, y, z);
      ellipse(0, 0, radius * 2, radius * 2);
      popMatrix();
    }
  }
  
}
Подякували: Chemist-i1