#include <iostream>
#include <cmath>
using namespace std;
// range : [min, max]
int random(int min, int max) {
static bool first = true;
if (first) {
srand(time(NULL)); //seeding for the first time only!
first = false;
}
return min + rand() % (max - min + 1);
}
std::pair<int,int> rand_heading_point(int start_x, int start_y, int max_x, int max_y, int heading_dir) {
int turn_x = 0;
int turn_y = 0;
// if heading_dir == 0 --> object moves horicontally towards max_x, increment x
// if heading_dir == 90 --> object moves vertically towards max_y, increment y
if (heading_dir <= 90) {
turn_x = random(start_x, max_x);
turn_y = random(start_y, max_y);
} else if (heading_dir <= 180) {
turn_x = random(0, start_x);
turn_y = random(start_y, max_y);
} else if (heading_dir <= 270) {
turn_x = random(0, max_y);
turn_y = random(0, start_y);
} else {
turn_x = random(start_x, max_x);
turn_y = random(0, start_y);
}
return std::make_pair(turn_x, turn_y);
}
void change_heading_dir(int curr_x, int curr_y, int turn_x, int turn_y, int &heading_dir) {
if (curr_x == turn_x || curr_y == turn_y) {
heading_dir *= 2;
}
}
// edit: use floats
void move(int &curr_x, int &curr_y, int heading_dir) {
int heading_rad = heading_dir * (M_PI / 180);
int inc_len = 1;
int x_inc = Math.cos(heading_rad) * inc_len;
int y_inc = Math.sin(heading_rad) * inc_len;
curr_x += x_inc;
curr_y += y_inc;
}
int main() {
// your code goes here
int start_x = 100;
int start_y = 100;
int width = 500;
int height = 500;
int dir = 0;
auto heading_point = rand_heading_point(start_x, start_y, width, height, dir);
cout << "x: " << heading_point.first << ", y: " << heading_point.second << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyByYW5nZSA6IFttaW4sIG1heF0KaW50IHJhbmRvbShpbnQgbWluLCBpbnQgbWF4KSB7CiAgIHN0YXRpYyBib29sIGZpcnN0ID0gdHJ1ZTsKICAgaWYgKGZpcnN0KSB7ICAKICAgICAgc3JhbmQodGltZShOVUxMKSk7IC8vc2VlZGluZyBmb3IgdGhlIGZpcnN0IHRpbWUgb25seSEKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgfQogICByZXR1cm4gbWluICsgcmFuZCgpICUgKG1heCAtIG1pbiArIDEpOwp9CgpzdGQ6OnBhaXI8aW50LGludD4gcmFuZF9oZWFkaW5nX3BvaW50KGludCBzdGFydF94LCBpbnQgc3RhcnRfeSwgaW50IG1heF94LCBpbnQgbWF4X3ksIGludCBoZWFkaW5nX2RpcikgewogICAgaW50IHR1cm5feCA9IDA7CiAgICBpbnQgdHVybl95ID0gMDsKICAgIAogICAgLy8gaWYgaGVhZGluZ19kaXIgPT0gMCAtLT4gb2JqZWN0IG1vdmVzIGhvcmljb250YWxseSB0b3dhcmRzIG1heF94LCBpbmNyZW1lbnQgeAogICAgLy8gaWYgaGVhZGluZ19kaXIgPT0gOTAgLS0+IG9iamVjdCBtb3ZlcyB2ZXJ0aWNhbGx5IHRvd2FyZHMgbWF4X3ksIGluY3JlbWVudCB5CiAgICBpZiAoaGVhZGluZ19kaXIgPD0gOTApIHsKICAgICAgdHVybl94ID0gcmFuZG9tKHN0YXJ0X3gsIG1heF94KTsKICAgICAgdHVybl95ID0gcmFuZG9tKHN0YXJ0X3ksIG1heF95KTsKICAgIH0gZWxzZSBpZiAoaGVhZGluZ19kaXIgPD0gMTgwKSB7CiAgICAgIHR1cm5feCA9IHJhbmRvbSgwLCBzdGFydF94KTsKICAgICAgdHVybl95ID0gcmFuZG9tKHN0YXJ0X3ksIG1heF95KTsKICAgIH0gZWxzZSBpZiAoaGVhZGluZ19kaXIgPD0gMjcwKSB7CiAgICAgIHR1cm5feCA9IHJhbmRvbSgwLCBtYXhfeSk7CiAgICAgIHR1cm5feSA9IHJhbmRvbSgwLCBzdGFydF95KTsKICAgIH0gZWxzZSB7CiAgICAgIHR1cm5feCA9IHJhbmRvbShzdGFydF94LCBtYXhfeCk7CiAgICAgIHR1cm5feSA9IHJhbmRvbSgwLCBzdGFydF95KTsKICAgIH0KICAgIAogICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHR1cm5feCwgdHVybl95KTsKfQoKdm9pZCBjaGFuZ2VfaGVhZGluZ19kaXIoaW50IGN1cnJfeCwgaW50IGN1cnJfeSwgaW50IHR1cm5feCwgaW50IHR1cm5feSwgaW50ICZoZWFkaW5nX2RpcikgewoJaWYgKGN1cnJfeCA9PSB0dXJuX3ggfHwgY3Vycl95ID09IHR1cm5feSkgewoJCWhlYWRpbmdfZGlyICo9IDI7Cgl9Cn0KCi8vIGVkaXQ6IHVzZSBmbG9hdHMKdm9pZCBtb3ZlKGludCAmY3Vycl94LCBpbnQgJmN1cnJfeSwgaW50IGhlYWRpbmdfZGlyKSB7CglpbnQgaGVhZGluZ19yYWQgPSBoZWFkaW5nX2RpciAqIChNX1BJIC8gMTgwKTsKICAgCWludCBpbmNfbGVuID0gMTsKICAgIGludCB4X2luYyA9IE1hdGguY29zKGhlYWRpbmdfcmFkKSAqIGluY19sZW47CiAgICBpbnQgeV9pbmMgPSBNYXRoLnNpbihoZWFkaW5nX3JhZCkgKiBpbmNfbGVuOwogIAkKICAJY3Vycl94ICs9IHhfaW5jOwogIAljdXJyX3kgKz0geV9pbmM7Cn0KCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJCglpbnQgc3RhcnRfeCA9IDEwMDsKCWludCBzdGFydF95ID0gMTAwOwoJaW50IHdpZHRoID0gNTAwOwoJaW50IGhlaWdodCA9IDUwMDsKCWludCBkaXIgPSAwOwoJCglhdXRvIGhlYWRpbmdfcG9pbnQgPSByYW5kX2hlYWRpbmdfcG9pbnQoc3RhcnRfeCwgc3RhcnRfeSwgd2lkdGgsIGhlaWdodCwgZGlyKTsKCQoJY291dCA8PCAieDogIiA8PCBoZWFkaW5nX3BvaW50LmZpcnN0IDw8ICIsIHk6ICIgPDwgaGVhZGluZ19wb2ludC5zZWNvbmQgPDwgZW5kbDsKCQoJcmV0dXJuIDA7Cn0=