干渉計算

clear; close all;
p0 = [100, 0, 0]';
p1 = [0, 100, 0]';
p2 = [0, 0, 100]';

p0x = p0(1);
p0y = p0(2);
p0z = p0(3);
p1x = p1(1);
p1y = p1(2);
p1z = p1(3);
p2x = p2(1);
p2y = p2(2);
p2z = p2(3);

%干渉面F
n = [0,0,1]';
P = [0,0,50]';

%交点Q0: P0-P2
v0 = P - p0;
v1 = p2 - p0;
t = dot(n,v0) / dot(n,v1);
Q0 = p0 + t*v1;

%交点Q1: P1-P2
v0 = P - p1;
v1 = p2 - p1;
t = dot(n,v0) / dot(n,v1);
Q1 = p1 + t*v1;
>> Q0
Q0 =
    50
     0
    50
>> Q1
Q1 =
     0
    50
    50

Processingでの表示

import com.jogamp.opengl.GLProfile;
{
  GLProfile.initSingleton();
}

float rx=0.0;
float ry=0.0;
float rz=0.0;

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

float coord_len = 500;
void drawCoord(){
  stroke(255, 0, 0);
  line(0, 0, 0, coord_len, 0, 0);
  stroke(0, 255, 0);
  line(0, 0, 0, 0, coord_len, 0);
  stroke(0, 0, 255);
  line(0, 0, 0, 0, 0, coord_len);  
}

void draw() {
  background(204);
  camera(300.0, 350.0, 520.0, width/2, height/2, 100.0,
    0.0, 1.0, 0.0);
  translate(width/2, height/2, 0);
  rotateX(rx);
  rotateY(ry);
  rotateZ(rz);
  drawCoord();

  
  line(50,0,50,0,50,50);

  stroke(0, 0, 0);
  beginShape();
  vertex(100, 0, 0);
  vertex( 0, 100, 0);
  vertex(   0, 0, 100);

  endShape();
  if (keyPressed==true) {
    switch(keyCode) {
    case UP:
      rx=rx-0.05;
      break;

    case DOWN:
      rx=rx+0.05;
      break;

    case LEFT:
      ry=ry-0.05;
      break;

    case RIGHT:
      ry=ry+0.05;
      break;
    }
  }
}

void mouseDragged() {
  rz=mouseX/20+0.05;
  println(rz);
}