Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Klurig Mattegrej....

Postades av 2007-11-28 09:48:19 - Niklas Rosenberg, i forum visual basic - allmänt, Tråden har 11 Kommentarer och lästs av 1015 personer

Skall rita en linje X1,Y1-X2,Y2 i en ruta som har storleken 0,0-65536,65536....
Om jag gör en förflyttning av linjen så att tex ena punkten hamnar utanför rutan så vill jag ha en funktion som räknar om så linjen slutar vid rutans kant och inte inte utanför....
Typ:
RitaLinje(X1,Y1,X2,Y2,R,G,B)
Där R,G,B är färgblandningen på Linjen...
Den Ritar givetvis bara den delen av strecket som är innamför ritområdet...
Är hela strecket utanför så ritar den givetvis inget...


Svara

Sv: Klurig Mattegrej....

Postades av 2007-11-28 11:29:13 - Niklas Jansson

Gammalt välkänt clipping-problem:
http://www.cc.gatech.edu/grads/h/Hao-wei.Hsieh/Haowei.Hsieh/mm.html


Svara

Sv:Klurig Mattegrej....

Postades av 2007-11-28 13:14:51 - Niklas Rosenberg

Du råkar inte ha skrivit något kod i VB för sådant?
Bra länk men jag kan inte C++ så jag förstår inte hur de gör...
Eller någon annan som gjort det?


Svara

Sv: Klurig Mattegrej....

Postades av 2007-11-28 15:32:09 - Niklas Jansson

Detta är inte C++ utan pseudokod, du kan översätta den till vad som helst.
http://www.cc.gatech.edu/grads/h/Hao-wei.Hsieh/Haowei.Hsieh/code1.html


Svara

Sv:Klurig Mattegrej....

Postades av 2007-11-28 16:59:59 - Niklas Rosenberg

Ok... Fattar typ inget av vad Koden menar... Får la sätta mig mig igen när jag inte är på jobbet och allt inte är så stressigt..
Om ingetn har ett exempel i VB så klart.. ler


Svara

Sv: Klurig Mattegrej....

Postades av 2007-11-28 18:26:55 - Niklas Jansson

http://www.google.se/search?q=clipping+vb


Svara

Sv:Klurig Mattegrej....

Postades av 2007-11-29 12:58:24 - Niklas Rosenberg

Har tyvärr sök på Google.. Hittar mest en massa om hur du fyller objekt osv..
Den första länken mi skrev var bra för den tog upp hur man gjorde med streck men jag förstod inte hans exempel.....


Svara

Sv: Klurig Mattegrej....

Postades av 2007-11-29 13:09:09 - Niklas Jansson

Men han beskriver ju det i text?

Jag förstår inte riktigt vad problemet är? Vill du ha färdig kod?

Du hajar väl att principen är att:
1. Om båda punkterna är utanför på samma sida, rita inte alls;
2. Om båda punkterna är innanför; rita hela.
3. Annars, räkna ut var skärningspunkterna sitter.

Du kanske inte behöver det mest optimala sättet, då kan du göra 1 och 2 först, och sen 3 på det enklast möjliga sättet. Räkna först ut om linjen ligger utanför eller innanför de fyra hörnpunkterna. Går den innanför alla är det sen bara att räkna ut skärningen med de fyra linjerna x= x_min, x=x_max, y=y_min, y=y_max, och ta de två som ligger innerst.


Svara

Sv:Klurig Mattegrej....

Postades av 2007-12-03 17:28:40 - Niklas Rosenberg

Nu har jag redigerat ner det så det blir mer lättläst....

procedure CohenSutherlandLineClipAndDraw(x0,y0,x1,y1,xmin,xmax,ymin,ymax : real ; value: integer);
{Cohen-Sutherland clipping algorithm for line P0=(x0,y0) to P1=(x1,y1) and clip rectangle with diagonal from (xmin,ymin) to (xmax,ymax).}

type
    	edge = (LEFT,RIGHT,BOTTOM,TOP);
    	outcode = set of edge;
var
	accept,done : boolean;
    	outcode0,outcode1,outcodeOut : outcode;
    	{Outcodes for P0,P1, and whichever point lies outside the clip rectangle}
    	x,y : real;
    
procedure CompOutCode(x,y: real; var code:outcode);{Compute outcode for the point (x,y) }
begin
      	code := [];
      	if y > ymax then code := [TOP]
	else if y < ymin then code := [BOTTOM];
      	if x > xmax then code := code +[RIGHT]
      	else if x < xmin then code := code +[LEFT]
end;

begin
	accept := false;  done := false;
	CompOutCode (x0,y0,outcode0); CompOutCode (x1,y1,outcode1);
    	repeat
      	if(outcode0=[]) and (outcode1=[]) then {Trivial accept and exit}
        begin 
		accept := true; done:=true 
	end
      	else if (outcode0*outcode1) <> [] then
        	done := true {Logical intersection is true, so trivial reject and exit.}
      	else {Failed both tests, so calculate the line segment to clip;		from an outside point to an intersection with clip edge.}
        begin {At least one endpoint is outside the clip rectangle; pick it.}
        	if outcode0 <> [] then outcodeOut := outcode0 else outcodeOut := outcode1; {Now find intersection point; use formulas y=y0+slope*(x-x0),x=x0+(1/slope)*(y-y0).}
          	if TOP in outcodeOut then
            	begin     {Divide line at top of clip rectangle}
              			x := x0 + (x1 - x0) * (ymax - y0) / (y1 - y0);
              			y := ymax
            	end
          	if BOTTOM in outcodeOut then
            	begin     {Divide line at bottom of clip rectangle}
			x := x0 + (x1 - x0) * (ymin - y0) / (y1 - y0);
              		y := ymax
            	end
          	else if RIGHT in outcodeOut then
            	begin     {Divide line at right edge of clip rectangle}
              		y := y0 + (y1 - y0) * (xmax - x0) / (x1 - x0);
              		x := xmax
            	end
          	else if LEFT in outcodeOut then
            	begin     {Divide line at left edge of clip rectangle}
              		y := y0 + (y1 - y0) * (xmin - x0) / (x1 - x0);
              		x := xmin
            	end;
          	{Now we move outside point to intersection point to clip, and get ready for next pass.}
          	if (outcodeOut = outcode0) then
            	begin
              		x0 := x; y0 := y; CompOutCode(x0,y0,outcode0)
            	end
          else
            	begin
              		x1 := x; y1 := y; CompOutCode(x1,y1,outcode1);
            	end
        end   {subdivide}
    until done;
    if accept then MidpointLineReal(x0,y0,x1,y1,value) {Version for real coordinates}
end; {CohenSutherlandLineClipAndDraw}


Svara

Sv:Klurig Mattegrej....

Postades av 2007-12-03 17:29:49 - Niklas Rosenberg

procedure CohenSutherlandLineClipAndDraw(x0,y0,x1,y1,xmin,xmax,ymin,ymax : real ; value: integer);
{Cohen-Sutherland clipping algorithm for line P0=(x0,y0) to P1=(x1,y1) and clip rectangle with diagonal from (xmin,ymin) to (xmax,ymax).}

type
edge = (LEFT,RIGHT,BOTTOM,TOP);
outcode = set of edge;
var
accept,done : boolean;
outcode0,outcode1,outcodeOut : outcode;
{Outcodes for P0,P1, and whichever point lies outside the clip rectangle}
x,y : real;

procedure CompOutCode(x,y: real; var code:outcode);{Compute outcode for the point (x,y) }
begin
code := [];
if y > ymax then code := [TOP]
else if y < ymin then code := [BOTTOM];
if x > xmax then code := code +[RIGHT]
else if x < xmin then code := code +[LEFT]
end;

begin
accept := false; done := false;
CompOutCode (x0,y0,outcode0); CompOutCode (x1,y1,outcode1);
repeat
if(outcode0=[]) and (outcode1=[]) then {Trivial accept and exit}
begin
accept := true; done:=true
end
else if (outcode0*outcode1) <> [] then
done := true {Logical intersection is true, so trivial reject and exit.}
else {Failed both tests, so calculate the line segment to clip; from an outside point to an intersection with clip edge.}
begin {At least one endpoint is outside the clip rectangle; pick it.}
if outcode0 <> [] then outcodeOut := outcode0 else outcodeOut := outcode1; {Now find intersection point; use formulas y=y0+slope*(x-x0),x=x0+(1/slope)*(y-y0).}
if TOP in outcodeOut then
begin {Divide line at top of clip rectangle}
x := x0 + (x1 - x0) * (ymax - y0) / (y1 - y0);
y := ymax
end
if BOTTOM in outcodeOut then
begin {Divide line at bottom of clip rectangle}
x := x0 + (x1 - x0) * (ymin - y0) / (y1 - y0);
y := ymax
end
else if RIGHT in outcodeOut then
begin {Divide line at right edge of clip rectangle}
y := y0 + (y1 - y0) * (xmax - x0) / (x1 - x0);
x := xmax
end
else if LEFT in outcodeOut then
begin {Divide line at left edge of clip rectangle}
y := y0 + (y1 - y0) * (xmin - x0) / (x1 - x0);
x := xmin
end;
{Now we move outside point to intersection point to clip, and get ready for next pass.}
if (outcodeOut = outcode0) then
begin
x0 := x; y0 := y; CompOutCode(x0,y0,outcode0)
end
else
begin
x1 := x; y1 := y; CompOutCode(x1,y1,outcode1);
end
end {subdivide}
until done;
if accept then MidpointLineReal(x0,y0,x1,y1,value) {Version for real coordinates}
end; {CohenSutherlandLineClipAndDraw}


Svara

Sv:Klurig Mattegrej....

Postades av 2007-12-03 17:33:06 - Niklas Rosenberg

Nej färdig Kod behöver jag inte.
Har läst igenom den första länken flera gånger och skrivit om koden till mer lättläslig men jag får inte ihop hur han räknar...
Måste man inte räkna ut vinklar på linjerna och se var de skär MAX/MIN kanten?? Och något sådant har han ju inte med....


Svara

Sv: Klurig Mattegrej....

Postades av 2007-12-03 17:38:15 - Niklas Rosenberg

Hm...
Nu när jag äntligen fick in KODen här på forumet såg jag hur de tänkte tror jag.. Men är inte säker... Måste hem och testa på datorn efter jobbet...


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 725
27 958
271 751
448
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies