У меня есть упражнение, которое требует поворота куба, созданного только с 2D-линиями вокруг оси x или y.Как повернуть вокруг оси x и y в 2D?
Вот что я должен сделать:
Цель этого проекта заключается в имитации 3dimensional отображения простого куба, используя только 2dimensional рисунки строки.
Это возможно потому, что для любой точки зрения, есть только 3 возможных конфигураций, когда вы смотрите на кубе и отобразить только его видимые лица:
-3 граней куба видны (левое изображение), что в общем случае
-только-лица видно (средний рисунок)
-только 1 лицо видно (правая картинка - пунктирные линии не должны появляться в вашем приложении)
Вы должны разработать программу, которая позволяет пользователю перемещаться вокруг куба с центром в середине экрана, с применением вращений, связанных с одной из своих 3-м осям (управляемый с помощью мыши или клавиатуры, используя например, «x» или «X», чтобы вращаться вокруг оси X).
Ваша программа должна быть разработана с использованием обработки: https://processing.org/ Этот язык очень похож на Java, вы можете найти много примеров и учебных пособий, например, как рисовать линии в 2D: https://processing.org/tutorials/drawing/.
Хотя вы можете взглянуть на некоторые довольно похожие проекты (например, https://processing.org/examples/rgbcube.html), пожалуйста, обратите внимание, что для этого проекта вам не разрешено использовать примитивы 3D-чертежа.
Если у вас есть время вы можете попытаться улучшить свой проект, добавляя новые функции:
-zoom или отдалить
-DISplay несколько кубов
рассмотрят другие виды платонических твердых веществ (https://en.wikipedia.org/wiki/Platonic_solid), для которого вы также можете определить максимальное количество видимых граней
Я прочитал много сообщений о 2D-преобразовании и с использованием преобразования m но я не могу понять, как это сделать в любом случае.
Это то, что я сделал до сих пор:
boolean locked = false;
float a = 0.2;
float s = 80;
float x0 = s;
float y0 = -s;
float x1 = s;
float y1 = s;
float x2 = -s;
float y2 = -s;
float x3 = -s;
float y3 = s;
float x0a, y0a, x1a, y1a, x2a, y2a, x3a, y3a;
void setup() {
size(480, 360);
noStroke();
translate(width/2, height/2);
line(x0,y0,x1,y1);
line(x2,y2,x3,y3);
line(x0,y0,x2,y2);
line(x3,y3,x1,y1);
}
void draw() {
update();
background(0);
stroke(255);
pushMatrix();
translate(width/2, height/2);
line(x0,y0,x1,y1);
line(x2,y2,x3,y3);
line(x0,y0,x2,y2);
line(x3,y3,x1,y1);
popMatrix();
}
void update(){
if (locked && mouseButton==LEFT){
y0a = y0*cos(a);
y0 = y0a;
y1a = y1*cos(a);
y1 = y1a;
y2a = y2*cos(a);
y2 = y2a;
y3a = y3*cos(a);
y3 = y3a;
}
if (locked && mouseButton==RIGHT){
y0a = y0*cos(a);
y0 = y0a;
y1a = y1*cos(a);
y1 = y1a;
y2a = y2*cos(a);
y2 = y2a;
y3a = y3*cos(a);
y3 = y3a;
}
}
void mousePressed(){
if (mouseButton == LEFT)
locked=true;
if (mouseButton == RIGHT)
locked=true;
}
void mouseReleased(){
locked = false;
}
void keyPressed() {
if (key == 'q'){
x0a = x0*cos(a)-y0*sin(a);
y0a = x0*sin(a)+y0*cos(a);
x0 = x0a;
y0 = y0a;
x1a = x1*cos(a)-y1*sin(a);
y1a = x1*sin(a)+y1*cos(a);
x1 = x1a;
y1 = y1a;
x2a = x2*cos(a)-y2*sin(a);
y2a = x2*sin(a)+y2*cos(a);
x2 = x2a;
y2 = y2a;
x3a = x3*cos(a)-y3*sin(a);
y3a = x3*sin(a)+y3*cos(a);
x3 = x3a;
y3 = y3a;
}
if (key == 'w'){
x0a = x0*cos(a)+y0*sin(a);
y0a = x0*-sin(a)+y0*cos(a);
x0 = x0a;
y0 = y0a;
x1a = x1*cos(a)+y1*sin(a);
y1a = x1*-sin(a)+y1*cos(a);
x1 = x1a;
y1 = y1a;
x2a = x2*cos(a)+y2*sin(a);
y2a = x2*-sin(a)+y2*cos(a);
x2 = x2a;
y2 = y2a;
x3a = x3*cos(a)+y3*sin(a);
y3a = x3*-sin(a)+y3*cos(a);
x3 = x3a;
y3 = y3a;
}
if (key == 'a'){
x0a = x0*cos(a);
x0 = x0a;
x1a = x1*cos(a);
x1 = x1a;
x2a = x2*cos(a);
x2 = x2a;
x3a = x3*cos(a);
x3 = x3a;
}
if (key == 's'){
x0a = x0*cos(a);
x0 = x0a;
x1a = x1*cos(a);
x1 = x1a;
x2a = x2*cos(a);
x2 = x2a;
x3a = x3*cos(a);
x3 = x3a;
}
if (key == 'z'){
y0a = y0*cos(a);
y0 = y0a;
y1a = y1*cos(a);
y1 = y1a;
y2a = y2*cos(a);
y2 = y2a;
y3a = y3*cos(a);
y3 = y3a;
}
if (key == 'x'){
y0a = y0*cos(a);
y0 = y0a;
y1a = y1*cos(a);
y1 = y1a;
y2a = y2*cos(a);
y2 = y2a;
y3a = y3*cos(a);
y3 = y3a;
}
}
Извините, но мы не можем просто сделать домашнее задание для вас. Почему бы вам не опубликовать то, что вы пробовали, в качестве [MCVE] (http://stackoverflow.com/help/mcve)? Можете ли вы повернуть точку? Как насчет линии?Где именно вы застряли? –