Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

Przebijanie trójkąta



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> C i C++
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
kag321
Gość





PostWysłany: Nie Sie 26, 2018 8:32 pm  OP    Temat postu: Przebijanie trójkąta Odpowiedz z cytatem Pisownia

sa dane float x i y i jeden trojkat 3 wierzcholki.
jak obliczyc czy punkt x i y przebija sie przez trojkat wysylaja wprost prostopadlom w osi z
do gory chodzi mim tylko o to by stwierdzic czy sie przecina przez trojkat bo mam funkcje
ktora sprawdza czy sie przecina przez kwadrat w przestrzeni x y z .
to link do flimiku
https://vimeo.com/286780192
a to krotki kod dll z funkcjami
Kod:
#include <iostream>
#include <math.h>

#define DLLEXPORT extern "C" __declspec(dllexport)

DLLEXPORT float kag_odleglosc(float x,float y,float z,float xx,float yy,float zz)
{
    float xxx=0.0;
    float yyy=0.0;
    float zzz=0.0;
    if(x > xx)
    xxx = x - xx;
    else
    xxx = xx- x;
    if(y > yy)
    yyy = y - yy;
    else
    yyy = yy -y;
    if (z > zz)
    zzz = z - zz;
    else
    zzz = zz -z;


return xxx + yyy + zzz;
}
DLLEXPORT float kag_odleglosc_pitagoras(float punkt1[3],float punkt2[3])
{
    float odlx=punkt1[0] - punkt2[0];
    float odly=punkt1[1] - punkt2[1];
    float odlz=punkt1[2] - punkt2[2];
    if (odlx < 0.0)
    odlx=odlx * -1;
    if (odly < 0.0)
    odly=odly * -1;
    if (odlz < 0.0)
    odlz=odlz * -1;
    float chwila  = sqrt( (odlx * odlx) + (odly * odly) );
    float zwrot = sqrt((chwila*chwila) + (odlz * odlz));
    
    


    //float       sqrtf( float arg );
    return zwrot;

}
DLLEXPORT void kag_odleglosc_speed_xyz(float punkt1[3],float punkt2[3],float wynik[3],float speed)
{
    float xx=punkt2[0] - punkt1[0];
    float yy=punkt2[1] - punkt1[1];
    float zz=punkt2[2] - punkt1[2];

xx = xx * speed;
yy = yy * speed;
zz = zz * speed;
wynik[0] = punkt1[0] + xx;
wynik[1] = punkt1[1] + yy;
wynik[2] = punkt1[2] + zz;



}
DLLEXPORT bool kag_przebitkatrojkata(float x,float y,float punkt1[3],float punkt2[3],float punkt3[3])
{
    float xmniejsze = punkt1[0];
    float xwieksze = punkt1[0];
    float ymniejsze = punkt1[1];
    float ywieksze = punkt1[1];
    if(xmniejsze > punkt2[0])
    xmniejsze = punkt2[0];
    if(xmniejsze > punkt3[0])
    xmniejsze = punkt3[0];
    if(xwieksze < punkt2[0])
    xwieksze = punkt2[0];
    if(xwieksze < punkt3[0])
    xwieksze = punkt3[0];

    if(ymniejsze > punkt2[1])
    ymniejsze = punkt2[1];
    if(ymniejsze > punkt3[1])
    ymniejsze = punkt3[1];
    if(ywieksze < punkt2[1])
    ywieksze = punkt2[1];
    if(ywieksze < punkt3[1])
    ywieksze = punkt3[1];

    if ((x > xmniejsze && x < xwieksze) && (y > ymniejsze && y < ywieksze))
    {
// tu ma obliczac czy naprawde sie przebija przez trojkat
        return true;

    }
    else
    return false;
return false;
}


Dodałem znaczniki formatujace kod. Zobacz: znaczniki formatujące - jak stosować.- Samolot

prosilbym o pomoc
Powrót do góry
kag321
Gość





PostWysłany: Pon Sie 27, 2018 2:32 pm  OP(?)    Temat postu: Odpowiedz z cytatem Pisownia

ok znalazlem rozwiazanie oto krotki kod rozwiazania.
Kod:
DLLEXPORT bool kag_przebitkatrojkat(float x1, float y1,float x2,float y2,float x3,float y3,float x,float y)
{
float denominator = ((y2 - y3)*(x1 - x3) + (x3 - x2)*(y1 - y3));
float a = ((y2 - y3)*(x - x3) + (x3 - x2)*(y - y3)) / denominator;
float b = ((y3 - y1)*(x - x3) + (x1 - x3)*(y - y3)) / denominator;
float c = 1 - a - b;

return 0 <= a && a <= 1 && 0 <= b && b <= 1 && 0 <= c && c <= 1;
}

Dodałem znaczniki formatujace kod. Zobacz: znaczniki formatujące - jak stosować.- Samolot

a to strona z ktorej znalazlem rozwiązanie.
http://totologic.blogspot.com/201401/accurate-point-in-triangle-test.html
Powrót do góry
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> C i C++ Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.14285 sekund, zapytan = 12
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |