sinnaelgen Skrevet 3. november 2007 Del Skrevet 3. november 2007 (endret) jeg trenger hjelp til noen beregninger som jeg har glemt hvordan man gjør det i forbindelse med rotasjon det som jeg ønsker å gjøre er å rotere et område med mange punkter slik at de får en ny plasering det jeg prøver å finne ut er hvordan man kan regne ut viklene ut fra seter i hele sirkelen egentlig så gjelder det alle punktene i området seter av område blir selvfølgelig halvparten av brede og høyden i område eksempel brede/høyde = 100 senter = 50 punktene kan være hvor som helst mellom 1 og 100. dette skal gjøres med alle punktene innenfor området her har jeg bare tat med 4 punkter vinklene vi serfølgelig være alt fra 0° og hele veien rund tilbake til 0°( 360°) så legger jeg til det antallet grader det skal rotereres med før jeg regner tilbake hvor det nye punktet skal plasseres ( x og y ) x og y ut fra senter er greit å regne ut men det som er problemet er vinkelen hvor i all hverdan har valget får å laste ned et bilde tatt veiene ? jeg får ikke forklart all før jeg finner dette valaget tenk der følgenede. jeg har definert et område la oss si at det er på 100 punkter både horisontalt og vertikalt da vil også senter være ved 50 punkter horisontalt og vertikalt. jeg bruker x for horisontal akse og y for den vertikale tenk dere et horisontal og vertikal akse gjenomm sirkelen så tar men et vilkårig punkt eksempel1. 1: x:=20; y:=20; x og y er før senter eller område øverst til venstre men så ønsker jeg å finne vinkelen fra dette punktet til senter avstanden blir etter litt beregning 30 for x og 30 for y jeg prøvde med srt(powwer(x,2=+power(y,2) kvaderatt roten av x i 2 + y i 2 men får det ikke ti l å stemme helt - jeg er sikker helt på jorde. når jeg tenker etter så dette beregnig av radiusen men hvordan var det man fant vinkelen eksempel 2: når x= 60 og y er 20 - x er på andre siden av senter eller øverst til høyre eksempel 3 x=20 y= 65 - y er under senter nedre til venstre eksempel 4 x=60 og y = 65 - begge er på den adre siden av senter eller nede til høyre jeg vet at det skal gå ann å bruke funksjonenen "tan","sin" og "cos" men jeg har glemt hvordan her er det beregninger i alle deler av sirkelen. vil da ikke bergningen bli litt forskjelig av hengig i hvilken del man beregner når beregningen med å finne vinkelen er rett så kan man bar legge til den vinkelen som det skal roteres Endret 4. november 2007 av elg-elg123 Lenke til kommentar
tasle Skrevet 6. november 2007 Del Skrevet 6. november 2007 x2:= x1* cos (v) - y1* sin (v); y2:= y1* cos (v) + x1* sin (v); der x1 og y1 er kordinatene til et punkt før rotasjonen, x2 og y2 er de nye koordinatene når et punkt roteres med v grader. Var det noe sånt du mente? Lenke til kommentar
sinnaelgen Skrevet 6. november 2007 Forfatter Del Skrevet 6. november 2007 (endret) jeg ser at jeg har vært klossete til å forklarer meg. utgangspunktet er : selv om det ikke er beregnet direkte til bbitmapbilde som består av mange punkter så kan det best forklares slik. man har et bilde som f.eks består av 200 x 200 punkter. bredde er 200 pixels høyde er 200 pixels dette haddeejeg tenkt å rotere om sin egen akse. rotasjon skal være på henholdsvis 90°,180° og 270° ( -90°). da må programmet jeg lager gå gjennom alle 40 000 punktene. beregne vinkelen ut fra senter , beregne vinkelen på det så må jeg legge til rotasjonen . beregne det nye punktet tasle: jeg skal se om jeg kan bruke eksempelet Endret 6. november 2007 av elg-elg123 Lenke til kommentar
tasle Skrevet 6. november 2007 Del Skrevet 6. november 2007 Ja, men i alle fall må du bruke lineær algebra for å rotere to- og tredimensjonalt, basert på mitt forrige svar. Det kan bli litt mye programmering, men du kan får det hele ferdigkokt på http://www.swissdelphicenter.ch/en/showcode.php?id=1540, eksempelvis. Lenke til kommentar
sinnaelgen Skrevet 6. november 2007 Forfatter Del Skrevet 6. november 2007 det ser ut til å virke som jeg ønsker hvordan kom du frem til disse to formlene. Lenke til kommentar
tasle Skrevet 7. november 2007 Del Skrevet 7. november 2007 hvordan kom du frem til disse to formlene. Det er tradisjonell matriseregning for rotasjoner av et punkt i et kartesisk koordinatsystem, der man tenker seg en vektor v fra origo til punktet P. Man kan enten rotere hele koordinatsystemet, eller kun rotere vektoren (som må være like lang). Vektoren v har en gitt vinkel i forhold til x-aksen som start, og en ny vinkel etter rotasjonen av P. Så her kan du i grunnen bruke Pythagoras der du setter inn sinus og cosinus til vinklene i forhold til hypotenusen i stedet for lengdene av katetene, og beholder den samme lengden på hypotenusen (=vektor v). Jeg gjorde et søk med Google, og fant fra til http://mathworld.wolfram.com/RotationMatrix.html. Illustrasjonene der skulle være greie nok som beskrivelse. Der er det også gjengitt en rotasjonsmatrise, som utregnet blir slik som i innlegget mitt ovenfor, når det gjelder en rotasjon mot klokka. En tilsvarende rotasjon medurs medfører stort sett bare bytte av fortegn i matriseutregningen. Med andre ord, ordinær lineær algebra. Lenke til kommentar
tresko Skrevet 8. november 2007 Del Skrevet 8. november 2007 For generelle bilde transformasjoner er det en fordel å bruke backward mapping (eller inverse mapping som det også heter) så slipper du anomalier som hull i det transformerte bildet når det nye transformerte bildet er større. Kan vel også være en fordel med interpolasjonsmetoder for å slipp hakkete kanter. Rutinen for backward mapping er å ta for seg alle piksler i det nye bildet/skjermen (nyttbilde) og sjekke om de "mapper" til en piksel i det utransformerte (gammeltbilde). for alle koordinater x',y' i nyttbilde gjør dette: x = round(cos(v)*x' + sin(v)*y') y = round(-sin(v)*x' + cos(v)*y') if (x,y) er inni gammeltbilde så: nyttbilde(x',y') = gammeltbilde(x,y) else nyttbilde(x',y') = 0; //Evt. ikke sett noen farge her for transparent oppførsel. end for Hvor v er rotasjons graden. Lenke til kommentar
sinnaelgen Skrevet 8. november 2007 Forfatter Del Skrevet 8. november 2007 jeg hold på med rotering av bitmapbilder for en sund siden og hadde glemt hvorda man gjorde det . jeg fant ikke tilbake til det programmet. der måtte nettopp beregne tilbake eller inverse om som du skriver for å unngå disse hullene. nå beregnet jeg det på en litt annen måte da denne gangen er det greit å bruke forslaget til Tasle siden det kun er snakk om vinkler på 90°,180° og 270° Lenke til kommentar
sinnaelgen Skrevet 13. november 2007 Forfatter Del Skrevet 13. november 2007 horfor stemmer ikke bregningene her punktet posisjonx , posisjony skal roteres 90° rundt senterx,sentery her bruker jeg først et område som jeg har kalt vindu som består av 4 verdier ( vindufra og vinduslut både horisontalt og vertikalt ved x og y ) inni dette område har jeg definer et arbeidsområde ( omradestart.x,omradestart.y ,omradeslutt.x,omradeslutt.y) jeg har beregnt de ralative vediene for omrade ( omradestar blir da satt til 0,0 og omrade slutt blir tilsvarende justert) og kalt dem for henholsvis rbredde og rhøyde punktet mitt må ogsa justeres tilsvarende jeg har også beregnet senter ved å dele høyde og bredde på 2 etter at punktet er juster 90 grader så må je flytte det tilbake til utgangspunktet ved å legge til omradefra. likevell sa blir det ikke rett jeg har også prøvd med å legge til senter posisjonen uten at det hjalp. hva er det som mangler til dette har jeg brukt 10 spiedit kontroller ( 2 til å bestemme posisjon ,4 for å bestemme område og 4 for å bestemme vindu ) for at jeg skulle se resultate så har jeg brukt både stringgrid og paintbox procedure TForm1.Button4Click(Sender: TObject); var rbredde,rhoyde:integer; rposx,rposy:integer; senterx,sentery:integer; jposy,jposx:integer; nyx,nyy:integer; begin // test paintbox2.Canvas.Brush.Color:=clwhite; paintbox2.Canvas.pen.Color:=clred; paintbox2.Canvas.Rectangle(0,0,vindusluttx.Value,vinduslutty.Value); paintbox2.Canvas.Rectangle(omradestartx.Value,omradestarty.Value,omradesluttx.Value,omradeslutty.Value); // reltivt område rbredde:=omradesluttx.Value-omradestartx.Value; rhoyde:=omradeslutty.Value-omradestarty.Value; stringgrid2.Cells[0,1]:='relative verdier'; stringgrid2.Cells[0,2]:='område'; stringgrid2.Cells[1,2]:=format('%d',[rbredde]); stringgrid2.Cells[2,2]:=format('%d',[rhoyde]); senterx:=rbredde div 2; sentery:= rhoyde div 2; stringgrid2.Cells[0,3]:='senter'; stringgrid2.Cells[1,3]:=format('%d',[senterx]); stringgrid2.Cells[2,3]:=format('%d',[sentery]); // test paintbox2.Canvas.Pixels[posisjonx.Value,posisjony.Value]:=clblue; rposx:=posisjonx.Value-omradestartx.Value; rposy:=posisjony.Value-omradestarty.Value; stringgrid2.Cells[0,4]:='posisjon'; stringgrid2.Cells[1,4]:=format('%d',[rposx]); stringgrid2.Cells[2,4]:=format('%d',[rposy]); // punkter mellom punkt og senter // juster runt 0-punkt /senter +/- senter jposx:=senterx-rposx; jposy:=sentery-rposy; stringgrid2.Cells[0,5]:='justert pos'; stringgrid2.Cells[1,5]:=format('%d',[jposx]); stringgrid2.Cells[2,5]:=format('%d',[jposy]); stringgrid2.Cells[0,6]:='90°'; nyx:=round(jposx*cos(90*pi/180)-jposy*sin(90*pi/180)); nyy:=round(jposx*cos(90*pi/180)+jposy*sin(90*pi/180)); stringgrid2.Cells[0,6]:='90°'; stringgrid2.Cells[1,6]:=format('%d',[nyx]); stringgrid2.Cells[2,6]:=format('%d',[nyy]); nyx:=nyx+omradestartx.Value+senterx; nyy:=nyy+omradestarty.Value+sentery; stringgrid2.Cells[0,7]:='justert 90°'; stringgrid2.Cells[1,7]:=format('%d',[nyx]); stringgrid2.Cells[2,7]:=format('%d',[nyy]); paintbox2.Canvas.Pixels[nyx,nyy]:=cllime; // test end; Lenke til kommentar
tasle Skrevet 14. november 2007 Del Skrevet 14. november 2007 Kan du legge ut hele prosjektet for nedlasting? Kanskje jeg får tid til å se på det i helga. Evn. sende det til meg via PM? Lenke til kommentar
sinnaelgen Skrevet 14. november 2007 Forfatter Del Skrevet 14. november 2007 (endret) det tror jeg nok det er for stort til siden det for tiden består av over 10 tusen program linjer. (10 163 linjer) men jeg kan beskrive det litt bedre. urgangspunktet er at jeg ønsket å lage mine egen knapper i programmen som jeg lager . derfor ha jeg gort det slik: en knapp i Windows består egentlig av ett eller flere bilder ( gjerne bitmap) så det programmet gjør eller skal gjøre er å lage disse bildene . man kan bestemme hvor mage pixels bilde skal bestå av ( det har ingen ting med oppløsningen på skjermen) bestemme hvor mange ruter dette består av ( kommer tilbake hva jeg mener med ruter) og da kan også bestemme hvor mange pixels hver rute består av grunne til at jeg bruker et rutenett er for å kunne justere størelsen uten gjøre alt på nytt. i hver rute plasere man en objekt ( figur ) som enten er en trekant firkant elle en figur som er avrundet rundet runt et av hjørnene. man kan faktisk plasere flere figurer i samme rute for å få til en spesiell virkning . man kan også bestemme hvor mange ruter en figur skal dekke. så har man mulighter til å forskyve inholdet i ruten både horisontalt og vertikalt. man har også muligheter til å endre figurene i i rutene også etter at man har plassert dem der . så ønsker jeg å gjøre det mulig å ender et område på flere ruter på en gang dog ikke alle det når jeg skal rotere dette valgte område sliter litt det som jeg la ut i forrige innlegg var en test får å prøve om rotasjonen virket jeg skal prøve å fremstille det grafiske utseende med tegn jeg kunne tenke meg en metode for å rotere det område som er markert med den brune rammen som fungerer jeg har en annen løsning på denne rotasjonen også men den virker ikke like enkel. Endret 15. november 2007 av elg-elg123 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå