grafika u VB-u presek linija

mslav

Aktivan član
Poruka
1.037
treba mi kod za nesto tipa :
imam nacrtanu sliku crno na belo linije i sada hocu da kada misem kliknem na jednu tacku na slici, pa na drugu da mi povuce liniju izmedju :D kapis?
e sad za*eban(ne znam ni ono prvo) :oops: deo:
linija koju sam ja povukao misem ce preseci neku liniju na slici u nekoj tacki npr. A.
meni trebaju koordinate tacke A i tacke B (linija povucena misem sece vise linija na slici)itd...
Znam da je pitanje komplikovano :lol: ali mi treba odgovor! :x
 
to je matematicko pitanje, ali sta je tu je.
ne znam VB, ali evo u delphi-ju...mislim da nije problem prevesti:

TLine je dat kao niz dva TPoint-a (pocetak i kraj)

function linesintersect(line1,line2:TLine):boolean;

procedure getequation(line:TLine;var slope,intercept:single);
begin
If line[1].x<>line[2].x
then slope:=(line[2].y-line[1].y)/ (line[2].x-line[1].x)
else slope:=1E10;
intercept:=line[1].y-slope*line[1].x;
end;

var
m1,m2,b1,b2:single;
x:integer;
begin
result:=false;

getequation(line1,m1,b1);
getequation(line2,m2,b2);

if m1<>m2 then
begin
x:=round((b2-b1)/(m1-m2));
If (x>=min(line1[1].x,line1[2].x))
and (x<=max(line1[1].x,line1[2].x))
and (x>=min(line2[1].x,line2[2].x))
and (x<=max(line2[1].x,line2[2].x))
then result:=true;
end;
end;
 
pogledaj na google malo za matematicko resenje, sigurno ima milion stranica za to.
u grubim crtama:
izracunas jednacine pravih koje su date kroz dve tacke u obliku y = kx + n.
onda ako sistem y1=k1x+n1 y2=k2x+n2 ima resenja tada se seku i resenje sistema je ta tacka, inace se ne seku.
ukucaj na google line intersect i naci ces

PS ne moze sve na gotovo, zar ne :roll: :idea:
 
cekaj, cekaj...kako su tebi date te prave krive i sta ja znam sta sve? ako su date jednacinama onda resavaj sisteme.
a ako je slika vec nacrtana...ima da se iskozis da odredis koja ti je koja, pa je onda jos teze....
pomozi mi da pokusam da ti pomognem :lol: ovako je prilicno neodredjeno sta konkretno imas a sta hoces da dobijes
 
Pa prvo sam mislio da stavim sliku ali sam onda i sam skapirao da ce biti pretesko, pa onda reko` da stavim sliku ali da sve linije budu oznacene jednacinama ali problem je sto slika treba da bude previse precizna tako da ima kosa da mi spadne sa glave dok ne nadjem resenje. :shock:
Tako da cu verovatno cu da batalim celu stvar :?
 
aha, pa onda i nije neki problem valjda :lol:
pretpostavljam da se posle prebacis u pogled sa strane?
ja bi to ovako uradio:
posto tih izohipsi nema mnogo svaku bi stavio u poseban layer, tj slicku (posto ne mogu bas da se predstave matematicki lepo) i onda bi ih iscrtavao tranaparentno jednu preko druge.
kad povuces pravu onda za svaki layer ides od 0 to duzina_slike i ispitujes da li je tackica crna i na pravoj i na krivoj (ako jeste eto preseka). onda na rezultatu dodas tacku na onoj visini koju ta izohipsa predstavlja a na X poziciji na kojoj je presek. kad nadjes sve te tacke samo ih ispovezi poligonalnom linijom
 
stormbringer:
pretpostavljam da se posle prebacis u pogled sa strane?
DA
stormbringer:
ja bi to ovako uradio:
posto tih izohipsi nema mnogo svaku bi stavio u poseban layer, tj slicku (posto ne mogu bas da se predstave matematicki lepo) i onda bi ih iscrtavao tranaparentno jednu preko druge.
ne kapiram!!!

ostatak si 100% pogodio kako sam mislio da pravim 8)
 
evo jos pametnijeg resenja: 8)
uzmes slicku koja predstavlja mapu (boja oznacava visinu, od zelene ka braon). onda tu sliku konvertujes u matricu koja je ista kao dimenzije slike s tim sto umesto boje na mesto i,j stoji visina koja odgovara boji te tacke na mapi. kad dobijes takvu matricu mozes da crtas i izohipse i pogled sa strane i 3d pogled i sta ti god padne na pamet...i to bez da trazis presek! samo ti treba onda j-na prave kroz dve tacke. onda za svaku tacku sa te prave ti iscrtas njenu visinu (koju vec imas u matrici)...tako je posao jedno 10x laksi
 
Mozda sam ja malo pritup, a mozda i nisam, u svakom slucaju nemoj se ljutis na glupo pitanje:
Napravih Picture1 u koji ce korisnik da unosi boje, znas ono (CurrentX, Y ;vbBlue, bla bla) e sad ne mogu ja da iscitam svuda te boje. Ako je slika 600 x 600, onda moram da povucem liniju po horizontali = 300 i odatle da vucem boje, pa za svaku visinu itt.
Ali kako da izvucem boje iz preseka (dajte mi CODE)???
I jos gluplje pitanje (nisam pipao grafiku u programiranju): Kako da povucem liniju izmedju 2 tacke :oops: ?
 
recimo da hoces liniju izmedju Start i ToPoint...
Prvo Image1.Canvas.MoveTo(Start.X, Start.Y) onda image1.Canvas.LineTo(ToPoint.X, ToPoint.Y)

a da malo analiziras liniju:
k := (ToPoint.Y - Start.Y) / (ToPoint.X - Start.X);
n := Start.Y - k * Start.X;
to su koeficijenti za j-nu y=k*x+n
onda ides ovako (pod uslovom da je Start levo od ToPoint, inace izvrni)
for x := 0 to Image1.Width do
//tacka na pravoj koja odgovara ovom X-u je (X, Round(k*X+n).
tako obidjes celu pravu i dobijes visine svih tacaka sa nje. onda lepo to nacrtas na novu sliku i dobijes sliku iz profila :)
npr
for x := 0 to Image1.Width do
LineTo(X, Visina(X, Round(k*X+n)))
 

Back
Top