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;
}
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
[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.