Moguca greska u zadatku

Zadatak: https://petlja.org/BubbleBee/r/Problems/ParalelogramTeme4
Da li je moguce da zadatak u obzir uzima samo jedno resenje tj ono koje ste vi zamislili? Za dati zadatak u svakom slucaju osim kad su tacke kolinearne postoje 3 resenja, a ja bas dobijam jedno od ta 3 i vraca mi WA. Da ne saljem kod izveo sam formulu preko jednacine prave kroz dve tacke nadjem koeficijent pravca i onda to ubacim u formulu za jednacinu prave kroz jednu tacku jer paralelogram ima 2 paralelne prave, da ne mrsim, mozete li to da proverite da ne gubim vreme na tom zadatku ako nista.

Evo ga i kod:
#include <bits/stdc++.h>

using namespace std;

double x[4],y[4];

int JesuKolinearne(int x1, int y1, int x2, int y2, int x3, int y3)
{
int provera;
provera = (x3-x1)*(y2-y3) - (x2-x3)*(y3-y1);
if(provera == 0) return 1;
else return 0;
}

int main()
{
    ios_base::sync_with_stdio(false);
    for(int i=0;i<3;i++)
    {
    cin >> x[i] >> y[i];
    }
    if(JesuKolinearne(x[0], y[0], x[1], y[1],  x[2], y[2])) cout << "N";
    else
    {
    x[3]=(y[2]-y[0]+x[0]*(y[2]-y[1])/(x[2]-x[1])-x[2]*(y[1]-y[0])*(x[1]-x[0]))/((y[2]-y[1])/(x[2]-x[1])-(y[1]-y[0])/(x[1]-x[0]));
    y[3]=(y[2]-y[1])/(x[2]-x[1])*(x[3]-x[0])+y[0];
    cout << setprecision(5) << fixed << x[3] << " " << y[3];
    }
    return 0;
}
1 Like

Mozda je jer proveravas da je double jednak nuli sa == 0. Umesto toga koristi neko const double eps = 1e-9 I proveri sa if -eps <promenljiva <eps. Double ovi umeju da budu dosta “neobicni” po tom pitanju. Jednom mi je program dao WA jer je resenje 2E-318 a ne 0, jer sam zaboravio setprecision. EDIT: Tek sad vidim da je to int, izvini stvarno.

Evaluirao sam tvoj kod bez funkcije da proverava da su tacke kolinearne i mislim da je samo 3. primer takav da su tacke A B C kolinearne. Sad, formulu sam pogledao ali ne znam odakle si krenuo. Mislim da si ok to odradio. Uostalom smatram da bi ovako trebalo da se radi https://prnt.sc/j6nh0z

iz poznatih tacaka se spuste normale na koordinantni sistem i dobices 2 parametra p i q. P je razlika u visinama(y) i ona je ista izmedju tacaka B i C , A i D ili A i B, C i D; na slici gledam A i B, C i D.

Onda ta rastojanja preneses sistem iz A’(x) i C’(y), iz tacka A’(x)+q i C’(y)+p konsturises prave d1 d2 normalne na sistem pa je presek d1 d2 ustvari tacka D…

tacno je da ima 3 tacke kao resenja, probaj da printas jedno, pa ako ne bude tacno, printas drugu, i tako…
desi se da za vise resenja on prihvata samo 1

mata https://patch.com/new-jersey/wyckoff/find-remaining-vertex-of-a-parallelogram-given-the-other-3-geometry

imas kod ovde https://www.geeksforgeeks.org/find-missing-point-parallelogram/

[EDIT]:
ovo je bilo za situaciju kada nam je dato sve osim tacke D (postovati redosled imenovanja tacaka), ostala 2 resenja su ustvari isti fazon samo zamenis tacke koje gledas.
Mada mislim da bi trebalo da prihvati gore navedeni primer jer u zadatku trazi tacku D.

1 Like