Add Circle Method.
This commit is contained in:
parent
6bf21a2532
commit
1821db6be4
|
@ -23,12 +23,24 @@ if (CMAKE_BUILD_TYPE STREQUAL "Release")
|
|||
add_definitions(-D__RELEASE__)
|
||||
endif (CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||
|
||||
# skidjular
|
||||
project("upperlowerbounds")
|
||||
# upperlowerBounds
|
||||
project("upperlowerBounds")
|
||||
|
||||
file (GLOB_RECURSE uplowbounds_hdrs "src/*.h")
|
||||
file (GLOB_RECURSE uplowbounds_hdrs "src/*.h src/*.hpp")
|
||||
file (GLOB_RECURSE uplowbounds_srcs "src/*.cpp")
|
||||
|
||||
include_directories("src/")
|
||||
|
||||
add_executable(uplowbounds ${uplowbounds_hdrs} ${uplowbounds_srcs})
|
||||
|
||||
# Test Cases
|
||||
|
||||
# Circle Test.
|
||||
add_executable(
|
||||
circletest
|
||||
src/vendor/catch.hpp
|
||||
src/methods/circle/circle.h
|
||||
../src/methods/circle/area.cpp
|
||||
../src/methods/circle/perimeter.cpp
|
||||
tests/CircleTest.cpp
|
||||
)
|
||||
|
|
|
@ -37,3 +37,15 @@
|
|||
Diameter: d=2r
|
||||
Area: A=PIr^2
|
||||
Circumference: C=2PIr=PId
|
||||
|
||||
## Upper and Lower bounds rules.
|
||||
UB=UB+UB
|
||||
UB=UB*UB
|
||||
LB=LB+LB
|
||||
LB=LB*LB
|
||||
|
||||
UB=UB/LB
|
||||
UB=UB-LB
|
||||
LB=LB/UB
|
||||
LB=LB-UB
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
#ifndef DEFS_H
|
||||
#define DEFS_H
|
||||
|
||||
struct uplowBounds {
|
||||
float s_lower = 0.0;
|
||||
float s_upper = 0.0;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,8 @@
|
|||
#include <iostream>
|
||||
#include "methods/circle/circle.h"
|
||||
|
||||
int main(void) {
|
||||
std::cout << "Hello world.\n";
|
||||
// std::cout << circle_calc_area(0.5f, 5.0f);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
#include "circle.h"
|
||||
|
||||
auto circle_calc_area(float max_error, float r, float a)->uplowBounds {
|
||||
auto answer = uplowBounds();
|
||||
|
||||
if (a == 0.0f && r != 0.0f) {
|
||||
answer.s_lower = M_PI*(pow((r-max_error),2.0f));
|
||||
answer.s_upper = M_PI*(pow((r+max_error),2.0f));
|
||||
return answer;
|
||||
}
|
||||
else if (r == 0.0f && a != 0.0f) { // calc radius if it is required.
|
||||
answer.s_lower = sqrt((a-max_error)/M_PI);
|
||||
answer.s_upper = sqrt((a+max_error)/M_PI);
|
||||
return answer;
|
||||
}
|
||||
else if (a != 0.0f && r != 0.0f)
|
||||
throw std::invalid_argument("Everything is given, you should probably reconsider your life decisions.");
|
||||
else if (a == 0.0f && r == 0.0f)
|
||||
throw std::invalid_argument("Nothing computes to nothing.");
|
||||
|
||||
return answer;
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
#ifndef CIRCLE_H
|
||||
#define CIRCLE_H
|
||||
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
|
||||
#include "defs.h"
|
||||
|
||||
auto circle_calc_area(float max_error, float r=0.0f, float a=0.0f)->uplowBounds;
|
||||
auto circle_calc_perimeter(float max_error, float r=0.0f, float d=0.0f, float p=0.0f)->uplowBounds;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,38 @@
|
|||
#include "circle.h"
|
||||
|
||||
auto circle_calc_perimeter(float me, float r, float d, float p)->uplowBounds {
|
||||
auto answer = uplowBounds();
|
||||
if (p == 0.0f && (d != 0.0f || r != 0.0f)) {
|
||||
if (r != 0.0f) { // Calc p from radius.
|
||||
answer.s_lower = 2*M_PI*(r-me);
|
||||
answer.s_upper = 2*M_PI*(r+me);
|
||||
return answer;
|
||||
}
|
||||
else if (d != 0.0f) { // Calc p from diameter.
|
||||
answer.s_lower = M_PI*(d-me);
|
||||
answer.s_upper = M_PI*(d+me);
|
||||
return answer;
|
||||
}
|
||||
else throw std::invalid_argument("Diameter or radius must be given when calculating circumference.");
|
||||
|
||||
return answer;
|
||||
}
|
||||
else if (p != 0.0f && (d == 0.0f || r == 0.0f)) {
|
||||
if (d != 0.0f) { // Find radius.
|
||||
answer.s_lower = (d-me)/2.0f;
|
||||
answer.s_upper = (d+me)/2.0f;
|
||||
return answer;
|
||||
}
|
||||
else if (r != 0.0f) { // Find diameter.
|
||||
answer.s_lower = (r-me)*2;
|
||||
answer.s_upper = (r+me)*2;
|
||||
return answer;
|
||||
}
|
||||
else throw std::invalid_argument("Radius or Diameter must be present to compute one when Circumference is given.");
|
||||
}
|
||||
else if (p != 0.0f && d != 0.0f && r != 0.0f)
|
||||
throw std::invalid_argument("Everything is given, Reconsider your life descisions.");
|
||||
else if (p == 0.0f && d == 0.0f && r == 0.0f)
|
||||
throw std::invalid_argument("Nothing computes to nothing.");
|
||||
return answer;
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
#ifndef EQU_TRIANGLE_H
|
||||
#define EQU_TRIANGLE_H
|
||||
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
|
||||
static auto etrian_calc_area(float max_error, float s=0.0f, float a=0.0f)->float;
|
||||
static auto etrian_calc_height(float max_error, float s=0.0f, float h=0.0f)->float;
|
||||
static auto etrain_calc_perimeter(float max_error, float s=0.0f, float p=0.0f)->float;
|
||||
|
||||
#endif
|
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef PARALLELOGRAM_H
|
||||
#define PARALLELOGRAM_H
|
||||
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
|
||||
static auto parall_calc_area(float max_error, float b=0.0f, float h=0.0f, float a=0.0f)->float;
|
||||
static auto parall_calc_perimeter(float max_error, float b=0.0f, float h=0.0f, float p=0.0f)->float;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef RECTANGLE_H
|
||||
#define RECTANGLE_H
|
||||
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
|
||||
static auto rect_calc_area(float max_error, float b=0.0f, float h=0.0f, float a=0.0f)->float;
|
||||
static auto rect_calc_perimeter(float max_error, float b=0.0f, float h=0.0f, float p=0.0f)->float;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef SQUARE_H
|
||||
#define SQUARE_H
|
||||
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
|
||||
static auto sqr_calc_area(float max_error, float s=0.0f, float a=0.0f)->float;
|
||||
static auto sqr_calc_perimeter(float max_error, float s=0.0f, float p=0.0f)->float;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef TRAPEZOID_H
|
||||
#define TRAPEZOID_H
|
||||
|
||||
#include <iostream>
|
||||
#include<math.h>
|
||||
|
||||
static auto trape_calc_area(float max_error, float a=0.0f, float b=0.0f, float h=0.0f, float area=0.0f)->float;
|
||||
static auto trape_calc_perimeter(float max_error, float a=0.0f, float b=0.0f, float h=0.0f, float p=0.0f)->float;
|
||||
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,60 @@
|
|||
#define CATCH_CONFIG_MAIN
|
||||
#include "vendor/catch.hpp"
|
||||
#include "methods/circle/circle.h"
|
||||
|
||||
TEST_CASE("circle_calc_area: test if radius is given") {
|
||||
REQUIRE(Approx(circle_calc_area(0.5f, 25.0f).s_lower) == (1885.74f));
|
||||
REQUIRE(Approx(circle_calc_area(0.5f, 25.0f).s_upper) == (2042.82f));
|
||||
|
||||
REQUIRE(Approx(circle_calc_area(0.05f, 25.0f).s_lower) == (1955.65f));
|
||||
REQUIRE(Approx(circle_calc_area(0.05f, 25.0f).s_upper) == (1971.36f));
|
||||
}
|
||||
|
||||
TEST_CASE("circle_calc_area: test if area is given") {
|
||||
REQUIRE(Approx(circle_calc_area(0.5f, 0.0f, 54.0f).s_lower).epsilon(.01) == (4.13f));
|
||||
REQUIRE(Approx(circle_calc_area(0.5f, 0.0f, 54.0f).s_upper).epsilon(.01) == (4.17f));
|
||||
|
||||
REQUIRE(Approx(circle_calc_area(0.05f, 0.0f, 54.0f).s_lower).epsilon(.01) == (4.14f));
|
||||
REQUIRE(Approx(circle_calc_area(0.05f, 0.0f, 54.0f).s_upper).epsilon(.01) == (4.15f));
|
||||
}
|
||||
|
||||
TEST_CASE("circle_calc_perimeter: test if radius and diameter is given") {
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.5f, 5.0f, 10.0f).s_lower).epsilon(.01) == (28.27f));
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.5f, 5.0f, 10.0f).s_upper).epsilon(.01) == (34.56f));
|
||||
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.05f, 5.0f, 10.0f).s_lower).epsilon(.1) == (31.1f));
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.05f, 5.0f, 10.0f).s_upper).epsilon(.01) == (31.73f));
|
||||
}
|
||||
|
||||
TEST_CASE("circle_calc_perimeter: test if radius is given") {
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.5f, 5.0f).s_lower).epsilon(.01) == (28.27f));
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.5f, 5.0f).s_upper).epsilon(.01) == (34.56f));
|
||||
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.05f, 5.0f).s_lower).epsilon(.1) == (31.1f));
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.05f, 5.0f).s_upper).epsilon(.01) == (31.73f));
|
||||
}
|
||||
|
||||
TEST_CASE("circle_calc_perimeter: test if diameter is given") {
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.5f, 0.0f, 5.0f).s_lower).epsilon(.01) == (14.13f));
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.5f, 0.0f, 5.0f).s_upper).epsilon(.01) == (17.27f));
|
||||
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.05f, 0.0f, 5.0f).s_lower).epsilon(.01) == (15.55f));
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.05f, 0.0f, 5.0f).s_upper).epsilon(.01) == (15.85f));
|
||||
}
|
||||
|
||||
TEST_CASE("circle_calc_perimeter: test if perimeter and radius is given") {
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.5f, 5.0f, 0.0f, 10.0f).s_lower).epsilon(.01) == (9.00f));
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.5f, 5.0f, 0.0f, 10.0f).s_upper).epsilon(.01) == (11.00f));
|
||||
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.05f, 5.0f, 0.0f, 10.0f).s_lower).epsilon(.1) == (9.9f));
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.05f, 5.0f, 0.0f, 10.0f).s_upper).epsilon(.1) == (10.1f));
|
||||
}
|
||||
|
||||
TEST_CASE("circle_calc_perimeter: test if perimeter and diameter is given") {
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.5f, 0.0f, 5.0f, 10.0f).s_lower).epsilon(.01) == (2.25f));
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.5f, 0.0f, 5.0f, 10.0f).s_upper).epsilon(.01) == (2.75f));
|
||||
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.05f, 0.0f, 5.0f, 10.0f).s_lower).epsilon(.01) == (2.475f));
|
||||
REQUIRE(Approx(circle_calc_perimeter(0.05f, 0.0f, 5.0f, 10.0f).s_upper).epsilon(.01) == (2.525f));
|
||||
}
|
||||
|
Loading…
Reference in New Issue