moi,
Piirtelen tässä kolmiota. Kysyn, että kuinka saisin kolmion tulemaan erillaiseen kuvioon kuin tämä, joka minulla on koodissani?
nyt tulee vaakaviiva päälle.
mov dx,100 ;rivi mov cx,25 ;pituus alku2: mov ah,12 ;piirrä piste mov al,2 ;väri push cx ;pinoon talteen cx:ään add cx,125 ;sarake, lisää cx:ään arvon int 10h pop cx ;pinosta dec dx ;vähennä dx riviä yhdellä loop alku2 ;******************************************************************* mov dx,75 ;rivi mov cx,25 ;pituus alku3: mov ah,12 ;piirrä piste mov al,2 ;väri push cx ;pinoon talteen cx:ään add cx,150 ;sarake, lisää cx:ään arvon int 10h pop cx ;pinosta inc dx ;lisää dx yhdellä loop alku3 ;************************************************************************ mov dx,75 ;rivi mov cx,49 ;pituus alku4: mov ah,12 ;piirrä piste mov dx,75 ;rivi push cx ;talteen add cx,125 ;summaa vakio cx:ään mov al,2 ;väri (xxxxhRGBb) int 10h pop cx dec dx loop alku4 ;käyttää cx:ää (cx--, lopetus jos cx=0)
Mitähän oikein tarkoitat? Jos haluat esimerkiksi kolmion, jonka kulmat ovat koordinaateissa (x1, y1), (x2, y2), (x3, y3), suosittelisin kehittämään ensin kunnollisen viivanpiirtorutiinin (esim. Bresenham's line algorithm), jolle annetaan alku- ja loppukoordinaatit, ja piirtämään sen avulla haluamiasi kolmioita.
Ks.
http://en.wikipedia.org/wiki/Bresenham's_line_algorithm
Kokeilin itse koodiasi, joka piirtää suorakulmaisen kolmion, jonka kateetti on tuo vaakasuora.
Sama koodi ehkä hieman selvennettynä:
.model tiny, stdcall .386 .code option casemap:none org 100h alku: mov ax, 0013h ; asetetaan näyttötila int 10h ; PIIRRETÄÄN KOLMION VASEN SIVU ALHAALTA YLÖSPÄIN mov dx, 100 ; rivi = 100 (alku y-koordinaatti = 100) mov cx, 25 ; pituus = 25 (vaaka- ja pystysuunnassa) alku2: mov ah, 0ch ; nämä kannataa asettaa, sillä INT10, C saattaa mov al, 2 ; muuttaa AX, SI ja DI rekisterejä. push cx ; tallennetaan cx:n arvo pinoon add cx, 125 ; lisätään cx:ään 125 int 10h ; piirrä piste kohtaan (cx, dx) pop cx ; palauta alkuperäinen cx:n arvo pinosta dec dx ; vähennä riviä yhdellä loop alku2 ; hyppää kohtaan alku2, ja vähennä cx:n arvoa yhdellä ; PIIRRETÄÄN KOLMION OIKEA SIVU YLHÄÄLTÄ ALASPÄIN mov dx, 75 ; rivi = 75 (alku y-koordinaatti = 75) mov cx, 25 ; pituus = 25 (vaaka- ja pystysuunnassa) alku3: mov ah, 0ch ; INT10h, 0Ch mov al, 2 ; aseta väri (2 = vihreä) push cx ; tallennetaan cx:n arvo pinoon add cx, 150 ; lisätään cx:ään 150 int 10h ; piirrä piste kohtaan (cx, dx) pop cx ; palauta alkuperäinen cx:n arvo pinosta inc dx ; lisää riviä yhdellä loop alku3 ; hyppää kohtaan alku3, ja vähennä cx:n arvoa yhdellä ; PIIRRETÄÄN KOLMION 3. SIVU (VAAKASUORA) OIKEALTA VASEMMALLE mov dx, 75 ; rivi = 75 mov cx, 49 ; pituus = 49 (vaakasuunnassa) alku4: mov ah, 0ch ; INT10h, 0Ch mov al, 2 ; aseta väri (2 = vihreä) push cx ; tallennetaan cx:n arvo pinoon add cx, 125 ; lisätään cx:ään 125 int 10h ; piirrä piste kohtaan (cx, dx) pop cx ; palauta alkuperäinen cx:n arvo pinosta loop alku4 ; käyttää cx:ää (cx--, lopetus jos cx == 0) mov ah, 08h ; odotetaan kunnes on painettu ENTER int 21h mov ax, 0003h ; palautetaan näyttötila int 10h int 20h ; lopetetaan ohjelma end alku
Aihe on jo aika vanha, joten et voi enää vastata siihen.