MXVK Vulkan Framework 0.24.0
C++20 Vulkan rendering framework for practical 2D and 3D application development with SDL3.
Loading...
Searching...
No Matches
surface Namespace Reference

Classes

struct  Point
struct  SurfaceDeleter
class  SurfaceWindow

Functions

std::array< Point, 10 > create_star_points (float center_x, float center_y, float outer_radius, float inner_radius)
bool point_in_star (float x, float y, const std::array< Point, 10 > &points)

Variables

constexpr float PI = 3.14159265358979323846f

Function Documentation

◆ create_star_points()

std::array< Point, 10 > surface::create_star_points ( float center_x,
float center_y,
float outer_radius,
float inner_radius )

Definition at line 21 of file surface.cpp.

21 {
22 std::array<Point, 10> points{};
23 constexpr float start_angle = -PI * 0.5f;
24 constexpr float step = PI / 5.0f;
25
26 for (std::size_t i = 0; i < points.size(); ++i) {
27 const float radius = (i % 2U == 0U) ? outer_radius : inner_radius;
28 const float angle = start_angle + static_cast<float>(i) * step;
29 points[i] = {
30 .x = center_x + std::cos(angle) * radius,
31 .y = center_y + std::sin(angle) * radius,
32 };
33 }
34 return points;
35 }
constexpr float PI
Definition surface.cpp:19

◆ point_in_star()

bool surface::point_in_star ( float x,
float y,
const std::array< Point, 10 > & points )

Definition at line 37 of file surface.cpp.

37 {
38 bool inside = false;
39 for (std::size_t i = 0, j = points.size() - 1U; i < points.size(); j = i++) {
40 const Point &a = points[i];
41 const Point &b = points[j];
42 if (((a.y > y) != (b.y > y)) && (x < (b.x - a.x) * (y - a.y) / (b.y - a.y) + a.x)) {
43 inside = !inside;
44 }
45 }
46 return inside;
47 }

Variable Documentation

◆ PI

float surface::PI = 3.14159265358979323846f
constexpr

Definition at line 19 of file surface.cpp.