a
Wśród wszystkich par znajdź parę o najmniejszej odległości, z pozostałych - kolejną parę ...
skrzyżowanie (prostej przez A,B) z (prostą przez C,D):
x=((Bx-Ax)*(Dx*Cy-Dy*Cx)-(Dx-Cx)*(Bx*Ay-By*Ax))/((By-Ay)*(Dx-Cx)-(Dy-Cy)*(Bx-Ax))
y=((By-Ay)*(Dx*Cy-Dy*Cx)-(Dy-Cy)*(Bx*Ay-By*Ax))/((By-Ay)*(Dx-Cx)-(Dy-Cy)*(Bx-Ax))
Dragon, głupio mnie prosić, ale czy mógłbyś wykonać w całości taki program? Normalnie bym nad tym posiedział, ale jutro mam oddanie tego projektu,a mam jeszcze sporo do zrobienia...
Nie jestem instytucją charytatywną.
funkcja do obliczania wzoru prostej korzysta z http://matematyka.pisz.pl/strona/1223.html
funkcja do obliczania wspólnego punktu powinna korzystać z prostego układu współrzędnych.
ja zwykle robię na opak ale może się przyda:
#include <iostream>
#include <conio.h>
#include <cstring>
#include <windows.h>
using namespace std;
struct sABC{
double a;
double b;
double c;
};
bool f_PunktPrzeciecia( POINT *p, struct sABC f1, struct sABC f2){
}
bool f_abc(struct sABC *wsk, POINT P1, POINT P2){
wsk->b = 1;
if((P2.x - P1.x) == 0)
return false;
wsk->a = (P2.y - P1.y)/(P2.x - P1.x);
wsk->c = ((-1 * (P2.y - P1.y) * P1.x) + ((P2.x - P1.x) * P1.y)) / (P2.x - P1.x);
};
int main()
{
POINT P, P1, P2;
P1.x = 5; P1.y = 0;
P2.x = 3; P2.y = 2;
struct sABC ABC1;
f_abc(&ABC1, P1, P2);
cout<<"funkcja na prosta o 2 punktach (" << P1.x << "," << P1.y << ") oraz (" << P2.x << "," << P2.y << ")" << endl;
cout<<"y = "<<ABC1.a<<"x+"<<ABC1.c<<endl;
P1.x = -3; P1.y = 0;
P2.x = -2; P2.y = 5;
struct sABC ABC2;
f_abc(&ABC2, P1, P2);
cout<<"funkcja na prosta o 2 punktach (" << P1.x << "," << P1.y << ") oraz (" << P2.x << "," << P2.y << ")" << endl;
cout<<"y = "<<ABC2.a<<"x+"<<ABC2.c<<endl;
f_PunktPrzeciecia(&P, ABC1, ABC2);
}
jak napiszesz funkcję f_PunktPrzeciecia(); w strukturze P będziesz miał punkt przecięcia.
Ja bym przeciął każdą prostą ze sobą, zapisał gdzieś wartości i potem wzorem na długość odcinka sprawdził, która z którą pierwej się połączyły :)
Twój problem nie jest jednoznaczny. Co jeśli jeden punkt jest w środku a pozostałe 7 równo rozłożone na okręgu?
W takim wypadku nie ma rozsądnej metody pogrupowania tych punktów. Przykładowo który punkt ma być połączony z tym w środku?
Tak samo jak już będziesz miał pary punktów, to możliwych przecięć prostych biedzisz maił nie 4 ale 6, więc to też trzeba jakoś ujednoznacznić.
Może lepiej wpisz tu całą treść swojego zadania.
nigdy tak nie będzie że wyjdzie jeden pkt w środku a pozostałe na okręgu, te pkt zawsze będą w 4 kupkach po 2 pkt. Na obrazku którym wrzuciłem jest efekt końcowy po prostu. Normalnie jest to kartka papieru która ma na bokach takie znaczniki(rogi tych znaczników to punkty n), a punkty p określają rogi tej kartki papieru.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.