I am currently working on polymorphism in class, part of my homework is the classic point inside a shape test. I always have access to the lower left point of the triangle and it is always assumed to be isosceles. Last year I solved this problem using linear inequalites but I found out that method can fail under certain situations. So I am trying the cross product method. It seems to work at least with the dozen or so tests I have preformed. I just wanted a second pair of eyes on it in case there is a situation I may not be considering. Thanks in advance.
bool Triangle::contains (double pX, double pY){
double lowLeftX;
double lowLeftY;
double midX;
double midY;
double lowRightX;
double lowRightY;
bool inside = false;
location (lowLeftX, lowLeftY); // access method to get points from
// shape ancestor
midX = .5 * base; // finding top (midX and midY)
midY = height; // and lower Right triangle points
lowRightX = lowLeftX + base;
lowRightY = lowLeftY;
double crossProductA = (pX *(lowLeftY - midY)) + (pY * (midX - lowLeftX)) +
(lowLeftX * midY - midX * lowLeftY);
double crossProductB = (pX *(midY - lowRightY)) + (pY * (lowRightX - midX)) +
(midX * lowRightY - lowRightX * midY);
double crossProductC = (pX *(lowLeftY - lowRightY)) + (pY * (lowRightX - lowLeftX)) +
(lowLeftX * lowRightY - lowRightX * lowLeftY);
crossProductA = .5 * abs(crossProductA);
crossProductB = .5 * abs(crossProductB);
crossProductC = .5 * abs(crossProductC);
if (crossProductA + crossProductB + crossProductC == (.5 * base * height)){
inside = true;
}
return inside;
}