Нарисуйте цилиндр из точки X в точку Y при обработке - PullRequest
1 голос
/ 06 ноября 2019

У меня есть точки в трехмерном пространстве, между которыми я хочу нарисовать цилиндр. В настоящее время у меня есть этот код:

        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 принимает два вектора и вычисляетрасстояние (Пифагор).

Заранее спасибо.

...