#include <bits/stdc++.h>
using namespace std;
// pair<int, int> koordinat;
struct point {
double x, y;
// constructor
point() {
// cout << "Constructor kosong" << endl;
}
point(double _x, double _y) {
// cout << "Constructor dgn 2 double" << endl;
x = _x;
y = _y;
}
double euclidean(point other) {
return sqrt((x-other.x)*(x-other.x) + (y-other.y)*(y-other.y));
}
double manhattan(point other) {
return abs(x-other.x) + abs(y-other.y);
}
};
struct line {
double A, B, C;
line() {}
line(double _A, double _B, double _C) {
A = _A;
B = _B;
C = _C;
}
bool isVertical() {
return B == 0;
}
double gradient() {
if(isVertical())
return 0;
return -A/B;
}
double constant() {
if(isVertical())
return 0;
return C/B;
}
double distanceFromPoint(point other) {
return fabs((A*other.x+B*other.y-C)/sqrt(A*A+B*B));
}
};
struct segment {
point A, B;
};
const double PI = acos(-1);
// arccos = cos^-1
// cos(x) = y --> acos(y) = x
// trigonometri menggunakan radian
// 180 derajat = PI radian
struct circle {
point center;
double radius;
circle() {}
circle(point _center, double _radius) {
center = _center;
radius = _radius;
}
double area() {
return PI*radius*radius;
}
};
int main() {
/*
Materi Pembinaan Intensif 2 Mei 2024
- Struct(ure)
- Dasar2 Geometri
- Titik
- Garis
- Lingkaran
*/
point koordinat(-2, -3);
cout << koordinat.x << " " << koordinat.y << endl;
cout << koordinat.euclidean(point(6, 3)) << endl;
cout << koordinat.manhattan(point(6, 3)) << endl;
line ver(1, 0, 3);
cout << ver.distanceFromPoint(koordinat) << endl;
circle lingkaran(koordinat, 10);
cout << setprecision(8);
cout << lingkaran.area() << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBwYWlyPGludCwgaW50PiBrb29yZGluYXQ7CgpzdHJ1Y3QgcG9pbnQgewoJZG91YmxlIHgsIHk7CgkvLyBjb25zdHJ1Y3RvcgoJcG9pbnQoKSB7CgkJLy8gY291dCA8PCAiQ29uc3RydWN0b3Iga29zb25nIiA8PCBlbmRsOwoJfQoJcG9pbnQoZG91YmxlIF94LCBkb3VibGUgX3kpIHsKCQkvLyBjb3V0IDw8ICJDb25zdHJ1Y3RvciBkZ24gMiBkb3VibGUiIDw8IGVuZGw7CgkJeCA9IF94OwoJCXkgPSBfeTsKCX0KCWRvdWJsZSBldWNsaWRlYW4ocG9pbnQgb3RoZXIpIHsKCQlyZXR1cm4gc3FydCgoeC1vdGhlci54KSooeC1vdGhlci54KSArICh5LW90aGVyLnkpKih5LW90aGVyLnkpKTsKCX0KCWRvdWJsZSBtYW5oYXR0YW4ocG9pbnQgb3RoZXIpIHsKCQlyZXR1cm4gYWJzKHgtb3RoZXIueCkgKyBhYnMoeS1vdGhlci55KTsKCX0KfTsKCnN0cnVjdCBsaW5lIHsKCWRvdWJsZSBBLCBCLCBDOwoJCglsaW5lKCkge30KCWxpbmUoZG91YmxlIF9BLCBkb3VibGUgX0IsIGRvdWJsZSBfQykgewoJCUEgPSBfQTsKCQlCID0gX0I7CgkJQyA9IF9DOwoJfQoJYm9vbCBpc1ZlcnRpY2FsKCkgewoJCXJldHVybiBCID09IDA7Cgl9Cglkb3VibGUgZ3JhZGllbnQoKSB7CgkJaWYoaXNWZXJ0aWNhbCgpKQoJCQlyZXR1cm4gMDsKCQlyZXR1cm4gLUEvQjsKCX0KCWRvdWJsZSBjb25zdGFudCgpIHsKCQlpZihpc1ZlcnRpY2FsKCkpCgkJCXJldHVybiAwOwoJCXJldHVybiBDL0I7Cgl9Cglkb3VibGUgZGlzdGFuY2VGcm9tUG9pbnQocG9pbnQgb3RoZXIpIHsKCQlyZXR1cm4gZmFicygoQSpvdGhlci54K0Iqb3RoZXIueS1DKS9zcXJ0KEEqQStCKkIpKTsKCX0KfTsKCnN0cnVjdCBzZWdtZW50IHsKCXBvaW50IEEsIEI7CQp9OwoKY29uc3QgZG91YmxlIFBJID0gYWNvcygtMSk7Ci8vIGFyY2NvcyA9IGNvc14tMQovLyBjb3MoeCkgPSB5IC0tPiBhY29zKHkpID0geAovLyB0cmlnb25vbWV0cmkgbWVuZ2d1bmFrYW4gcmFkaWFuCi8vIDE4MCBkZXJhamF0ID0gUEkgcmFkaWFuCgpzdHJ1Y3QgY2lyY2xlIHsKCXBvaW50IGNlbnRlcjsKCWRvdWJsZSByYWRpdXM7CgljaXJjbGUoKSB7fQoJY2lyY2xlKHBvaW50IF9jZW50ZXIsIGRvdWJsZSBfcmFkaXVzKSB7CgkJY2VudGVyID0gX2NlbnRlcjsKCQlyYWRpdXMgPSBfcmFkaXVzOwoJfQoJZG91YmxlIGFyZWEoKSB7CgkJcmV0dXJuIFBJKnJhZGl1cypyYWRpdXM7Cgl9Cn07CgppbnQgbWFpbigpIHsKCS8qCglNYXRlcmkgUGVtYmluYWFuIEludGVuc2lmIDIgTWVpIDIwMjQKCS0gU3RydWN0KHVyZSkKCS0gRGFzYXIyIEdlb21ldHJpCgkgIC0gVGl0aWsKCSAgLSBHYXJpcwoJICAtIExpbmdrYXJhbgoJKi8KCXBvaW50IGtvb3JkaW5hdCgtMiwgLTMpOwoJY291dCA8PCBrb29yZGluYXQueCA8PCAiICIgPDwga29vcmRpbmF0LnkgPDwgZW5kbDsKCWNvdXQgPDwga29vcmRpbmF0LmV1Y2xpZGVhbihwb2ludCg2LCAzKSkgPDwgZW5kbDsKCWNvdXQgPDwga29vcmRpbmF0Lm1hbmhhdHRhbihwb2ludCg2LCAzKSkgPDwgZW5kbDsKCQoJbGluZSB2ZXIoMSwgMCwgMyk7Cgljb3V0IDw8IHZlci5kaXN0YW5jZUZyb21Qb2ludChrb29yZGluYXQpIDw8IGVuZGw7CgkKCWNpcmNsZSBsaW5na2FyYW4oa29vcmRpbmF0LCAxMCk7Cgljb3V0IDw8IHNldHByZWNpc2lvbig4KTsKCWNvdXQgPDwgbGluZ2thcmFuLmFyZWEoKSA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=