LightOJ – 1178 – Trapezium

Problem link

আলোচনাঃ

      আমাদেরকে একটা Trapezium দেয়া হবে। তার ক্ষেত্রফল বের করতে হবে।

উত্তরঃ

আমরা জানি, Trapezium এর ক্ষেত্রফল = 0.5*( সমান্তরাল বাহুদ্বয়ের যোগফল * উচ্চতা )

আমাদের সমান্তরাল বাহুদ্বয়ের মান দেয়া আছে । শুধু উচ্চতা বের করলেই হলো। তো এটা দুইভাবে করা যায়।

Trapezium (Image 1)
Trapezium (Image 1)

1)

Trapezium ABFD তে AB এর সমান করে DE বাহু আকি। তাহলে ADBE সামান্তরিক তৈরি হলো। এখন , AD = BE and AB = DE. So, BE = c , DE = d

and EF = a-c = x . ধরি DK = h

△DEF হতে পাই,

=> s = (DE+EF+DF)/2

SO, Area of △DEF = sqrt(s*(s-DE)*(s-EF)*(s-DF))

                             = sqrt(s*(s-d)*(s-x)*(s-b)

আবার আমরা জানি,  △DEF= 0.5*EF*DK

                                          = 0.5*x*h

তাহলে আমরা লিখতে পারি,

          0.5*x*h = sqrt(s*(s-d)*(s-x)*(s-b))

    So, h = ( sqrt(s*(s-d)*(s-x)*(s-b)) * 2) / x

Trapezium (Image 2)
Trapezium (Image 2)

2)

আমরা a এর উপর দুইটা লম্ব টানবো ।  লম্ব টানার পর একটা অংশকে যদি x ধরি তাহলে অপরটা হয় (a-x). তাহলে দুইটা সমকোণী ত্রিভুজ তৈরি হলো।

△ABC থেকে পাই,

       Here, big= (a-c)

       d^2 = (big-x)^2 + h^2 ———-(1)

△DEF থেকে পাই,

       b^2 = h^2 + x^2

  =>h^2 = b^2 – x^2 ————–(2)

From (1),

    d^2 = (big-x)^2 + h^2

=>d^2 = (big-x)^2 + b^2 – x^2

=>d^2 = big^2 + x^2 – 2*big*x  + b^2 – x^2

=>d^2 = big^2 – 2*big*x  + b^2

SO, x = (big^2 + b^2 – d^2) / (2*big)

So, h = sqrt(b*b – x*x)

C++ Code:

#include<bits/stdc++.h>
using namespace std;
#define PI acos(-1.0)

int main(){
    int t;
    cin>>t;
    double a,b,c,d;
    for(int i=1;i<=t;i++){ // O(1)
        cin>>a>>b>>c>>d;
        double x=abs(a-c);
           
        double s=(x+b+d)/2.0;
        
        double triangleArea=sqrt(s*(s-b)*(s-d)*(s-x));
       
        // .5*x*h = triangleArea
        double h=(triangleArea*2)/x;
        double trapeziumArea=.5*(a+c)*h;
        
        printf("Case %d: %.10f\n",i,trapeziumArea);
    }
}

-----------------------------------  OR ------------------------------------

#include<bits/stdc++.h>
using namespace std;
#define PI acos(-1.0)
int main(){
    int t;
    cin>>t;
    double a,b,c,d;
    for(int i=1;i<=t;i++){
        cin>>a>>b>>c>>d;
        double big=abs(a-c);
        double x=(b*b + big*big - d*d)/(2*big);
           
        double h=sqrt(b*b-x*x);
        double trapeziumArea=.5*(a+c)*h;
       
        printf("Case %d: %.10lf\n",i,trapeziumArea);
    }
}

Leave a Reply