У меня есть точки в трехмерном пространстве, между которыми я хочу нарисовать цилиндр. В настоящее время у меня есть этот код:
applet.pushMatrix();
applet.stroke(0);
applet.fill(0);
applet.line(this.start.x, this.start.y, this.start.z, this.end.x, this.end.y, this.end.z); //debug, shows where the cylinder should be
applet.translate(this.start.x, this.start.y);
applet.beginShape(PConstants.TRIANGLE_STRIP);
float xdif = this.end.x - this.start.x;
float ydif = this.end.y - this.start.y;
float zdif = this.end.z - this.start.z;
float rx = (float)Math.atan(ydif / xdif);
float ry = (float)Math.atan(zdif / xdif);
float rz = (float)Math.atan(zdif == 0 ? 0 : ydif / zdif);
applet.rotateZ((float) (rx - Math.PI / 2));
applet.rotateY((float) (ry - Math.PI / 2));
applet.rotateX((float) (rz - Math.PI / 2));
float r = 20;
float len = HelperFunctions.distance(this.start, this.end) / 2;
boolean w = false;
for (int i = 0; i < 2; i += 1) {
for (float j = 0; j < Math.PI * 2 + 0.2; j += 0.4) {
w = !w;
float z = (i + (w ? 0 : 1)) * len;
float x = (float)(r * Math.cos(j));
float y = (float)(r * Math.sin(j));
applet.vertex(y, x, z);
}
}
applet.endShape();
applet.popMatrix();
Цилиндр действительно рисует правильно, однако он не вращается правильно. Я пытаюсь использовать триг, чтобы определить углы поворота, однако я не уверен, что сделал это правильно. Как получить правильные углы поворота вокруг так, чтобы он рисовался от начала вектора до конца вектора?
Вектор - это пользовательский класс с float x, y, z
, а HelperFunctions.distance принимает два вектора и вычисляетрасстояние (Пифагор).
Заранее спасибо.