/*
ESP32 HTTPClient Jokes API Example
https://wokwi.com/projects/342032431249883731
Copyright (C) 2022, Uri Shaked
*/
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <list>
#define TFT_DC 2
#define TFT_CS 15
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
class Point {
public:
Point(int x, int y) : x(x), y(y) {
}
~Point() {
}
int getX() const {
return x;
}
int getY() const {
return y;
}
double distanceToOrigin() const {
return std::sqrt(x * x + y * y);
}
int quadrant() const {
if (x > 0 && y > 0) return 1;
if (x < 0 && y > 0) return 2;
if (x < 0 && y < 0) return 3;
if (x > 0 && y < 0) return 4;
return 0;
}
private:
int x;
int y;
};
Point nearestToOrigin(const std::list<Point>& points) {
Point nearest = points.front();
double minDistance = nearest.distanceToOrigin();
for (const Point& p : points) {
double distance = p.distanceToOrigin();
if (distance < minDistance) {
minDistance = distance;
nearest = p;
}
}
return nearest;
}
Point farthestFromOrigin(const std::list<Point>& points) {
Point farthest = points.front();
double maxDistance = farthest.distanceToOrigin();
for (const Point& p : points) {
double distance = p.distanceToOrigin();
if (distance > maxDistance) {
maxDistance = distance;
farthest = p;
}
}
return farthest;
}
int countPointsInQuadrant(const std::list<Point>& points, int quadrant) {
int count = 0;
for (const Point& p : points) {
if (p.quadrant() == quadrant) {
count++;
}
}
return count;
}
std::list<Point> points;
void setup() {
tft.begin();
points.emplace_back(2, 3);
points.emplace_back(-1, 4);
points.emplace_back(-3, -2);
points.emplace_back(5, -1);
points.emplace_back(1, 1);
points.emplace_back(7, 6);
points.emplace_back(-2, -5);
points.emplace_back(1, -8);
points.emplace_back(-9, 2);
points.emplace_back(-4, 3);
}
void loop() {
int cx = tft.width() / 2;
int cy = tft.height() / 2;
tft.fillScreen(ILI9341_BLACK);
Point nearest = nearestToOrigin(points);
tft.print("Nearest point to origin:");
tft.print("(");
tft.print(nearest.getX());
tft.print(",");
tft.print(nearest.getY());
tft.print(")");
tft.print("\n");
Point farthest = farthestFromOrigin(points);
tft.print("Farthest point to origin:");
tft.print("(");
tft.print(farthest.getX());
tft.print(",");
tft.print(farthest.getY());
tft.print(")");
tft.print("\n");
for (int i = 1; i <= 4; i++) {
tft.print("No.of points in quadrant:");
tft.print(i);
tft.print(":");
tft.print(countPointsInQuadrant(points, i));
tft.print("\n");
}
delay(100000);
}