Kiểm tra 3 điểm thẳng hàng

Mình đang cần giúp đề bài như sau:

  • Kiểm tra 3 điểm xem có thẳng hàng ko nếu có in ra YES
  • Nếu không thì in ra diện tích và chu vi tam giác 3 điểm tạo thành

Đây là code của mình(đang sai) mong mọi người chỉ giúp

#include <bits/stdc++.h>
using namespace std;
struct toado
{
    float x,y;
};
toado a,b,c;
int kiemtra()
{
    float d1=sqrt((a.x-b.x)*(a.x-b.x)-(a.y-b.y)*(a.y-b.y));
    float d2=sqrt((a.x-c.x)*(a.x-c.x)-(a.y-c.y)*(a.y-c.y));
    float d3=sqrt((c.x-b.x)*(c.x-b.x)-(c.y-b.y)*(c.y-b.y));
    if (d1+d2==d3||d1+d3==d2||d2+d3==d1)
    {
        return 1;
    }
    return 0;
}
void xuli()
{
    if(kiemtra()==1){cout<<"thang hang";}
    else
    {
        float d1=sqrt((a.x-b.x)*(a.x-b.x)-(a.y-b.y)*(a.y-b.y));
        float d2=sqrt((a.x-c.x)*(a.x-c.x)-(a.y-c.y)*(a.y-c.y));
        float d3=sqrt((c.x-b.x)*(c.x-b.x)-(c.y-b.y)*(c.y-b.y));
        float c=d1+d2+d3;
        float p=c/2;
        float s=sqrt(p*(p-d1)*(p-d2)*(p-d3));
        cout<<setprecision(3)<<fixed<<s<<" "<<c<<endl;
    }
}
int main()
{
    cin>>a.x>>a.y;
    cin>>b.x>>b.y;
    cin>>c.x>>c.y;
    xuli();
    return 0;
}
1 Like
  1. Công thức khoảng cách là dấu + chứ.
  2. Nên dùng hàm để tính khoảng cách :smiley:
  3. 3 điểm thẳng hàng thì dùng hệ số góc: (yC - yA)/(xC-xA) = (yB-yA)/(xB-xA)
    hay (yC-yA)(xB-xA) = (xC-xA)(yB-yA) để xử lí các đường song song với hai trục.
2 Likes

Mình đọc một số bài thì thấy người ta dùng công thức trừ và khai báo 3 hệ số x,y,z chứ ko phải x,y như mình

Uk nhỉ dùng công thức cộng là đúng luôn.Tks bạn n!!!

Vectors cùng phương / phụ thuộc tuyến tính hay A = kB
<=> (xA, yA) = k(xB, yB) => xA * yB - yA*xB = 0.

Điểm trong không gian cũng vậy.

Thẳng hàng thì cộng khoảng cách 2 thằng bé nhất bằng thằng còn lại.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?