adding math utility header
This commit is contained in:
parent
f3456f6c8d
commit
9fcd2b2e9e
4
Point.h
4
Point.h
@ -8,12 +8,12 @@ private:
|
||||
public:
|
||||
Point(float x, float y) : m_x(x), m_y(y) {}
|
||||
|
||||
float x()
|
||||
float x () const
|
||||
{
|
||||
return m_x;
|
||||
}
|
||||
|
||||
float y()
|
||||
float y () const
|
||||
{
|
||||
return m_y;
|
||||
}
|
||||
|
53
Utility.h
Normal file
53
Utility.h
Normal file
@ -0,0 +1,53 @@
|
||||
#pragma once
|
||||
#ifndef UTILITY_H
|
||||
|
||||
static float sign (Point &p1, Point &p2, Point &p3)
|
||||
{
|
||||
return (p1.x() - p3.x()) * (p2.y() - p3.y()) - (p2.x() - p3.x()) * (p1.y() - p3.y());
|
||||
}
|
||||
|
||||
static bool IsPointInTriangle(Point &pt, Point &p1, Point &p2, Point &p3)
|
||||
{
|
||||
float d1 = sign(pt, p1, p2);
|
||||
float d2 = sign(pt, p2, p3);
|
||||
float d3 = sign(pt, p3, p1);
|
||||
|
||||
bool has_neg = (d1 < 0) || (d2 < 0) || (d3 < 0);
|
||||
bool has_pos = (d1 > 0) || (d2 > 0) || (d3 > 0);
|
||||
|
||||
return !(has_neg && has_pos);
|
||||
}
|
||||
|
||||
static bool SortForMinXMaxY (const Point& a, const Point& b)
|
||||
{
|
||||
if (a.x() != b.x())
|
||||
{
|
||||
return (a.x() < b.x());
|
||||
}
|
||||
return (a.y() > b.y());
|
||||
}
|
||||
|
||||
static bool SortForMinYMaxX(const Point& a, const Point& b)
|
||||
{
|
||||
if (a.y() != b.y())
|
||||
{
|
||||
return (a.x() < b.x());
|
||||
}
|
||||
return (a.y() > b.y());
|
||||
}
|
||||
|
||||
static void sortPoints (std::vector<Point>& pts)
|
||||
{
|
||||
std::sort(pts.begin(), pts.end(), SortForMinXMaxY);
|
||||
}
|
||||
|
||||
// TODO: what happens if all/more points are on hor/vert line? -> sort for x, than y should handle this
|
||||
static std::pair<Point, Point> getMinMaxX(std::vector<Point>& pts)
|
||||
{
|
||||
// TODO: check if already sorted? assume array is sorted? call sort utility function???
|
||||
//sortPoints(pts);
|
||||
std::sort(pts.begin(), pts.end(), SortForMinXMaxY);
|
||||
|
||||
return std::make_pair(pts[0], pts[pts.size() - 1]);
|
||||
}
|
||||
#endif // UTILITY_H
|
12
main.cpp
12
main.cpp
@ -8,6 +8,7 @@
|
||||
#include "Display.h"
|
||||
#include "Point.h" // TODO: check if there is a usable SFML or c++ class
|
||||
#include "Timing.h"
|
||||
#include "Utility.h"
|
||||
|
||||
// TODOs:
|
||||
// - use SFML vec2 instead of Point class
|
||||
@ -43,8 +44,8 @@ int main (int argc, char **argv)
|
||||
srand(static_cast <unsigned> (0)); // fixed seed for testing
|
||||
for (int i = 0; i < valCount; ++i)
|
||||
{
|
||||
float x = static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / WIDTH));
|
||||
float y = static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / HEIGHT));
|
||||
float x = OFFSET + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / (WIDTH - OFFSET)));
|
||||
float y = OFFSET + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / (HEIGHT - OFFSET)));
|
||||
points.push_back(Point(x, y));
|
||||
}
|
||||
}
|
||||
@ -76,7 +77,8 @@ int main (int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: need sort here?
|
||||
// TODO: sort here, once and for all? xD
|
||||
sortPoints(points);
|
||||
for (Point& pt : points)
|
||||
{
|
||||
std::cout << "pt: " << pt.x() << ", " << pt.y() << std::endl;
|
||||
@ -85,6 +87,10 @@ int main (int argc, char **argv)
|
||||
if (vis)
|
||||
{
|
||||
// TODO: use data as ctor argument? pointer?
|
||||
|
||||
// TEST to check SFML coordinate system
|
||||
points.push_back(Point(0, 0));
|
||||
|
||||
Display display;
|
||||
display.setData(points);
|
||||
display.show();
|
||||
|
Loading…
x
Reference in New Issue
Block a user