#include <Arduino.h>
#define k 3 // Number of neighbors to consider
struct DataPoint {
int x;
int y;
int label;
};
DataPoint trainingData[] = {
{1, 2, 0},
{2, 3, 0},
{3, 1, 0},
{5, 4, 1},
{6, 5, 1},
{7, 3, 1}
};
int classify(int x, int y) {
int distances[k];
int labels[k];
for (int i = 0; i < k; ++i) {
distances[i] = 1000; // Initialize with a large value
labels[i] = -1; // Initialize to an invalid label
}
for (int i = 0; i < sizeof(trainingData) / sizeof(trainingData[0]); ++i) {
int dx = x - trainingData[i].x;
int dy = y - trainingData[i].y;
int dist = dx dx + dy dy;
for (int j = 0; j < k; ++j) {
if (dist < distances[j]) {
for (int l = k - 1; l > j; --l) {
distances[l] = distances[l - 1];
labels[l] = labels[l - 1];
}
distances[j] = dist;
labels[j] = trainingData[i].label;
break;
}
}
}
int count0 = 0, count1 = 0;
for (int i = 0; i < k; ++i) {
if (labels[i] == 0) {
++count0;
} else {
++count1;
}
}
return (count0 > count1) ? 0 : 1;
}
void setup() {
Serial.begin(9600);
// Test the classifier with new data points
int result1 = classify(4, 2);
int result2 = classify(1, 4);
Serial.print("Classifying (4, 2): ");
Serial.println(result1);
Serial.print("Classifying (1, 4): ");
Serial.println(result2);
}
void loop() {
// Nothing to do here
}