我正在尝试创建一个程序,用户可以在其中输入坐标点,并根据这些点生成三角形。不幸的是,当用户输入的第一面是斜边。我的程序说三角形不是直角三角形,实际上它是一个。
#include<iostream>
#include<SFML/Graphics.hpp>
#include<math.h>
using namespace std;
using namespace sf;
int main(){
double x1;
double y1;
double x2;
double y2;
double x3;
double y3;
double DistanceP0;
double DistanceP1;
double DistanceP2;
int yes;
double area;
double area2;
double hyp;
double side1;
double side2;
cout << "Enter 6 integers. (it works better when those integers are greater than 100)" << endl;
cin >> x1;
cin >> y1;
cin >> x2;
cin >> y2;
cin >> x3;
cin >> y3;
RenderWindow window(VideoMode(1500,800), "SFML saves!");
window.setFramerateLimit(60);
sf:: ConvexShape Triangle;
Triangle.setPointCount(3);
Triangle.setPoint(0, sf::Vector2f(x1,y1));
Triangle.setPoint(1, sf::Vector2f(x2,y2));
Triangle.setPoint(2, sf::Vector2f(x3,y3));
DistanceP0 = sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)));
DistanceP1 = sqrt(((x1 - y1) * (x1 - y1)) + ((x3 - y3) * (x3 - y3)));
DistanceP2 = sqrt(((x3 - x2) * (x3 - x2)) + ((y3 - y2) * (y3 - y2)));
//I am pretty sure that the error happens somewhere here{
if (DistanceP0 > DistanceP1 and DistanceP0 > DistanceP2)
{
hyp = DistanceP0;
if (DistanceP1 >= DistanceP2)
{
side1 = DistanceP1;
side2 = DistanceP2;
}
else(DistanceP1 <= DistanceP2){
side1 = DistanceP2;
side2 = DistanceP1;
}
}
else if (DistanceP1 > DistanceP0 and DistanceP1 > DistanceP2){
hyp = DistanceP1;
if (DistanceP0 >= DistanceP1)
{
side1 = DistanceP0;
side2 = DistanceP1;
}
else(DistanceP0 <= DistanceP1)
{
side1 = DistanceP1;
side2 = DistanceP0;
}
}
else {
hyp = DistanceP2;
if (DistanceP0 >= DistanceP1)
{
DistanceP0 = side1;
DistanceP1 = side2;
}
else(DistanceP0 <= DistanceP1)
{
DistanceP1 = side1;
DistanceP2 = side2;
}
}
if((side1 * side1) + (side2 * side2) == (hyp * hyp)){
yes = 1;
cout << "Your triangle is a right triangle" << endl;
}
else{
cout << "Your triangle is not a right triangle" << endl;
}
if(fabs(((side1 * side1) -(side2 * side2) - (hyp * hyp))) <= 0.00001){
yes = 1;
cout << "Your triangle is a right triangle" << endl;
}
//}
if(yes == 1){
cout << "The area of your triangle is " << (DistanceP0 * DistanceP1)/2 << endl;
area = (DistanceP0 * DistanceP1)/2;
}
area = sqrt(area);
RectangleShape RightSquare(Vector2f(area,area));
RightSquare.setPosition(x1,y1);
RightSquare.setFillColor(Color::Red);
if(yes!= 1){
double s = (DistanceP0 + DistanceP1 + DistanceP2)/2;
double R = s *((s - DistanceP0)*(s - DistanceP1) * (s - DistanceP2));
area2 = sqrt(fabs(R));
cout << "The area of your triangle is " << area2 << endl;
}
double area3 = sqrt(area2);
RectangleShape Square(Vector2f(area3,area3));
Square.setPosition(x1, y1);
Square.setFillColor(Color::Red);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event));
{
if(event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(Triangle);
if(yes == 1){
window.draw(RightSquare);
}
else{
window.draw(Square);
}
window.display();
}
return 0;
}
答案 0 :(得分:0)
所以我更正了代码,这在所有情况下都能正常工作。在哪里我发现错误我评论//here
#include<iostream>
#include<SFML/Graphics.hpp>
#include<math.h>
using namespace std;
using namespace sf;
int main(){
double x1;
double y1;
double x2;
double y2;
double x3;
double y3;
double DistanceP0;
double DistanceP1;
double DistanceP2;
int yes;
double area;
double area2;
double hyp;
double side1;
double side2;
cout << "Enter 6 integers. (it works better when those integers are greater than 100)" << endl;
cin >> x1;
cin >> y1;
cin >> x2;
cin >> y2;
cin >> x3;
cin >> y3;
RenderWindow window(VideoMode(1500,800), "SFML saves!");
window.setFramerateLimit(60);
sf:: ConvexShape Triangle;
Triangle.setPointCount(3);
Triangle.setPoint(0, sf::Vector2f(x1,y1));
Triangle.setPoint(1, sf::Vector2f(x2,y2));
Triangle.setPoint(2, sf::Vector2f(x3,y3));
DistanceP0 = sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)));
DistanceP1 = sqrt(((x3 - x1) * (x3 - x1)) + ((y3 - y1) * (y3 - y1)));
DistanceP2 = sqrt(((x3 - x2) * (x3 - x2)) + ((y3 - y2) * (y3 - y2)));
//I am pretty sure that the error happens somewhere here{
if (DistanceP0 > DistanceP1 and DistanceP0 > DistanceP2)
{
hyp = DistanceP0;
if (DistanceP1 >= DistanceP2)
{
side1 = DistanceP1;
side2 = DistanceP2;
}
else if(DistanceP1 <= DistanceP2){
side1 = DistanceP2;
side2 = DistanceP1;
}
}
else if (DistanceP1 > DistanceP0 and DistanceP1 > DistanceP2){
hyp = DistanceP1;
// here
if (DistanceP0 >= DistanceP2)
{
side1 = DistanceP0;
side2 = DistanceP2;
}
else if(DistanceP0 <= DistanceP2)
{
side1 = DistanceP2;
side2 = DistanceP0;
}
}
else {
hyp = DistanceP2;
if (DistanceP0 >= DistanceP1)
{
/* here
DistanceP0 = side1;
DistanceP1 = side2;
*/
side1 = DistanceP0;
side2 = DistanceP1;
}
else if(DistanceP0 <= DistanceP1)
{
// here
side1 = DistanceP1;
side2 = DistanceP0;
}
}
if(((side1 * side1) + (side2 * side2)) == (hyp * hyp)){
yes = 1;
cout << "Your triangle is a right triangle" << endl;
}
// here?
else if(fabs((((side1 * side1) +(side2 * side2)) - (hyp * hyp))) <= 0.00001){
yes = 1;
cout << "Your triangle is a right triangle" << endl;
}
else{
cout << "Your triangle is not a right triangle" << endl;
}
//}
if(yes == 1){
cout << "The area of your triangle is " << (DistanceP0 * DistanceP1)/2 << endl;
area = (DistanceP0 * DistanceP1)/2;
}
area = sqrt(area);
RectangleShape RightSquare(Vector2f(area,area));
RightSquare.setPosition(x1,y1);
RightSquare.setFillColor(Color::Red);
if(yes!= 1){
double s = (DistanceP0 + DistanceP1 + DistanceP2)/2;
double R = s *((s - DistanceP0)*(s - DistanceP1) * (s - DistanceP2));
area2 = sqrt(fabs(R));
cout << "The area of your triangle is " << area2 << endl;
}
double area3 = sqrt(area2);
RectangleShape Square(Vector2f(area3,area3));
Square.setPosition(x1, y1);
Square.setFillColor(Color::Red);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event));
{
if(event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(Triangle);
if(yes == 1){
window.draw(RightSquare);
}
else{
window.draw(Square);
}
window.display();
}
return 0;
}
答案 1 :(得分:0)
按照这样做检查:
if(distance0 >= distance1 && distance0 >= distance2)
{
hypothenus = distance0;
side1 = distance1;
side2 = distance2;
}
if(distance1 >= distance0 && distance1 >= distance2)
{
hypothenus = distance1;
side1 = distance0;
side2 = distance2;
}
if(distance2 >= distance0 && distance2 >= distance1) {
hypothenus = distance2;
side1 = distance0;
side2 = distance1;
}
if(hypothenus*hypothenus == side1*side1 + side2*side2){
// ok
}