Я новичок в программировании на C++, и это моя первая программа на C++. Не стесняйтесь прокомментировать какие-либо улучшения, которые я мог бы сделать или не использовать методы, помимо моих вопросов, чтобы я мог улучшить и остальную часть кода. Программа - простая процедура, которая проверяет, сталкиваются ли шары. Если они сталкиваются, то векторы скорости обоих шаров выступают против. Проблема у меня в том, что функция «checkcollision», похоже, не в состоянии написать обновленную скорость для объекта тестового теста. Я могу вычислить расстояние, но я не могу изменить/написать testball.xspeed. Вы знаете причину этого?C++ function can not write to object
Другой вопрос: я хотел ввести значения положения и скорости в качестве векторов. Поэтому я создал векторный класс. Но я не мог использовать переменные этого типа в классе шара. Как создать векторный объект и использовать его в классе шаров?
Большое вам спасибо!
class vector {
public:
float x;
float y;
vector(float x_,float y_){
x=x_;
y=y_;
}
};
class ball {
public:
// vector position; // doesnt work
// vector speed;
float x;
float y;
float xspeed;
float yspeed;
ball(float x_,float y_,float xspeed_,float yspeed_){
x=x_;
y=y_;
xspeed=xspeed_;
yspeed=yspeed_;
}
};
void checkcollision(ball testball, ball testball2){
float distance;
distance=pow(pow(testball.x-testball2.x,2)+pow(testball.y-testball2.y,2),0.5);
if (distance<0.1){
testball.xspeed=-testball.xspeed;
testball.yspeed=-testball.yspeed;
testball2.xspeed=-testball2.xspeed;
testball2.yspeed=-testball2.yspeed;
}
}
int main(){
float time=0;
float timestep=0.1;
float runtime=20;
int xmax=10;
int ymax=15;
ball testball(5,5,2,2); // positionx,y, speed x,y
ball testball2(4,5,1,2);
for(double i = 0; i <runtime; i = i + timestep)
{
time=time+timestep;
checkcollision(testball,testball2);
writeFile(testball.x,testball.y,testball2.x,testball2.y,count);
}
return 0;
}
Из-за передачи по значению ваша функция изменяет только копию. – melpomene
Вы должны определить другой конструктор для вашего векторного класса (без параметров), чтобы определить его как член класса, как вы бы здесь. 'vector() {}' например. –
Когда вы пишете код, начните с чего-то маленького и простого, который отлично работает, а затем добавьте немного сложности за раз. ** Никогда не добавляйте к коду, который не работает. ** И когда вы просите о помощи с проблемой, попробуйте четко описать проблему; «Я не мог использовать переменные этого типа» мог означать полдюжины вещей. – Beta