1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
const double EPSILON(1e-12);
// function prototypes
// ENTER FUNCTION PROTOTYPE FOR read_vector HERE.
void read_vector (const string & prompt, double & x, double & y);
// ENTER FUNCTION PROTOTYPE FOR vector_length HERE.
double vector_length (double x, double y);
// ENTER FUNCTION PROTOTYPE FOR write_vector HERE.
void write_vector (const string & prompt, double & x, double & y);
// ENTER FUNCTION PROTOTYPE FOR vector_add HERE.
void vector_add (double x1, double y1, double x2, double y2, double & x3, double & y3);
// ENTER FUNCTION PROTOTYPE FOR vector_subtract HERE.
void vector_subtract (double x1, double y1, double x2, double y2, double & x3, double & y3);
// ENTER FUNCTION PROTOTYPE FOR scalar_mult HERE.
void scalar_mult (double x1, double y1, double s, double & x2, double & y2);
// ENTER FUNCTION PROTOTYPE FOR normalize HERE.
void normalize (double & x, double & y);
// ENTER FUNCTION PROTOTYPE FOR perpendicular HERE.
void perpendicular (double & x1, double & y1, double & x2, double & y2);
// *** DO NOT CHANGE ANY CODE IN THE MAIN FUNCTION.
int main()
{
double u1, v1; // coordinates of first vector
double u2, v2; // coordinates of second vector
double u3, v3;
double scalar;
read_vector("Enter first vector (2 floats): ", u1, v1);
read_vector("Enter second vector (2 floats): ", u2, v2);
cout << "Enter scalar multiplier: ";
cin >> scalar;
cout << endl;
write_vector("First vector: ", u1, v1);
write_vector("Second vector: ", u2, v2);
cout << endl;
vector_add(u1, v1, u2, v2, u3, v3);
write_vector("Vector add: ", u3, v3);
vector_subtract(u1, v1, u2, v2, u3, v3);
write_vector("Vector subtract: ", u3, v3);
scalar_mult(u1, v1, scalar, u3, v3);
write_vector("Scalar multiplier: ", u3, v3);
cout << endl;
write_vector("First vector: ", u1, v1);
write_vector("Second vector: ", u2, v2);
perpendicular(u1, v1, u2, v2);
return(0);
}
// DEFINE FUNCTION read_vector HERE.
void read_vector (const string & prompt, double & x, double & y)
{
cout << prompt;
cin >> x >> y;
}
// DEFINE FUNCTION vector_length HERE.
double vector_length (double x, double y)
{
double v_length = sqrt(pow(x, 2) + pow(y, 2));
return (v_length);
}
// DEFINE FUNCTION write_vector HERE.
void write_vector (const string & prompt, double & x, double & y)
{
cout << "(" << x << ", " << y << ") has length " << vector_length(x,y) << endl;
}
// DEFINE FUNCTION vector_add HERE.
void vector_add (double x1, double y1, double x2, double y2, double & x3, double & y3)
{
x3 = x1 + x2;
y3 = y1 + y2;
cout << "Vector add: ";
}
// DEFINE FUNCTION vector_subtract HERE.
void vector_subtract (double x1, double y1, double x2, double y2, double & x3, double & y3)
{
x3 = x1 - x2;
y3 = y1 - y2;
cout << "Vector subtract: ";
}
// DEFINE FUNCTION scalar_mult HERE.
void scalar_mult (double x1, double y1, double s, double & x2, double & y2)
{
x2 = s * x1;
y2 = s * y1;
cout << "Vector multiplier: ";
}
// DEFINE FUNCTION normalize HERE.
void normalize (double & x, double & y)
{
double v = vector_length(x, y);
if (v < EPSILON)
{
x = x / v;
y = y / v;
}
}
// DEFINE FUNCTION perpendicular HERE.
void perpendicular (double & x1, double & y1, double & x2, double & y2)
{
normalize(x1, y1);
normalize (x2, y2);
double p1x = -y1;
double p1y = x1;
double p2x = -p1x;
double p2y = -p1y;
if (abs(x2 - p1x) < EPSILON && abs(y2 - p1y) < EPSILON || (abs(x2 - p2x) < EPSILON && abs(y2 - p2y) < EPSILON))
{
cout << "Vectors are PERPENDICULAR." << endl;
}
else
{
cout << "Vectors are NOT PERPENDICULAR." << endl;
}
}
| |