Informatică, întrebare adresată de ionutg38, 9 ani în urmă

Se dau în plan, un punct de coordonate (x,y)și o dreaptă ce trece prin punctele de coordonate (x1,y1) si (x2,y2). Să se scrie un program C++ care sa determine distanța de la punct la dreaptă.


artur99: Rezolvi matematic, scoți o formulă și o pui în c++
ionutg38: #include <stdio.h> #include <cmath> using namespace std; FILE *f=fopen("distantapunctdreapta.in","r"); FILE *g=fopen("distantapunctdreapta.out","w"); int main() { int x,y,x1,y1,x2,y2; float d; fscanf(f,"%d%d%d%d%d%d",&x,&y,&x1,&y1,&x2,&y2); int a=y2-y1; int b=x1-x2; int c=y1*x2-y2*x1; d=abs((a*x+b*y+c)/sqrt(a*a+b*b)); fprintf(g,"%1.2f",d); return 0; }
ionutg38: Dar pe unele teste nu obtin raspunsul corect
Utilizator anonim: Nu stiu daca formula pentru calculul lui "c" este buna aici, dar as zice ca daca variabilele alea sunt de tip float, ar trebui citite cu formatul %f, nu %d.
Utilizator anonim: scuze, am citit gresit
Utilizator anonim: Probabil greseala vine din partea de matematica, si sunt prea obosit sa fac calculele cu metoda asta. La mine mi-a dat bine folosind formula mea. Modifici tu sa le iei din fisiere.

Răspunsuri la întrebare

Răspuns de Utilizator anonim
4
A(x_1,y_1);\ B(x_2,y_2) \\ d:ax+b=y \\  \left \{ {{ax_1+b=y_1} \atop {ax_2+b=y_2}} \right.  \\ b=y_2-ax_2 \\ ax_1+y_2-ax_2=y_1 \\ a(x_1-x_2)=y_1-y_2 \\ a= \frac{y_1-y_2}{x_1-x_2} \\ b=y_2-ax_2 \\ \hbox{a si b au fost gasite. Formula pentru distanta este:}  \\ d_{M(x_M,y_M),d(ax+b=y)}= \frac{|y_M-ax_M-b|}{\sqrt{1+a^2}}

Codul din prima imagine din atasament este scris in limbajul C++, compileaza cu succes folosind Visual Studio 2015 si implementeaza functionalitatea ceruta de problema. In a doua imagine se observa rularea programului pentru un punct de coordonate 4 si 5, a carui distanta la dreapta ce trece prin punctele (0,3) si (1,6) este corect calculata, rezultand ~3.1623.




Anexe:

ionutg38: Multumesc mult! Merge pe si mai putine teste, dar apreciez intentia de a ma ajuta.
ionutg38: coordonatele punctelor trebuie sa fie numere intregi
Utilizator anonim: Pe ce exemple nu merge?
ionutg38: Nu stiu, ca n-am acces la testele folosite de autor
Alte întrebări interesante