私はC++プログラミングの初心者です。これは私の最初のC++プログラムです。私の質問とは別にテクニックを作ったり、不適切な使い方をしたりして、コードの残りの部分を改善することができます。 プログラムはボールが衝突するかどうかをチェックする単純なルーチンです。衝突した場合、両方のボールの速度ベクトルは反対になります。 私が持っている問題は、関数 "checkcollision"がテストボールオブジェクトに更新された速度を書き込むことができないようです。私は距離を計算することができますが、私は変更できません/ testball.xspeedに書き込みます。あなたはこれの理由を知っていますか?C++関数はオブジェクトへの書き込みができません
私の他の質問は次のとおりです。位置と速度の値をベクトルとして導入したいと考えました。したがって、私はベクトルクラスを作成しました。しかし、ボールクラスでこのタイプの変数を使用することはできませんでした。 どのようにベクトルオブジェクトを作成し、ボールクラスでこのオブジェクトを使用できますか?
ありがとうございました!
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(){}'です。 –
コードを書くときは、小さくてシンプルなものから始めて、完全に機能してから、少しずつ複雑なものを追加してください。 **動作しないコードには絶対に追加しないでください。**問題の解決を求めるときは、問題を明確に記述してください。 "私はこのタイプの変数を使うことができませんでした"とは、6ダースのことを意味するかもしれません。 – Beta