Phate Inviata 30 Luglio 2008 Segnala Condividi Inviata 30 Luglio 2008 Ho un problemino che non riesco propio a risolvere. Mi sto trovando, complice l'università, a dover creare una retta che rimbalza sullo schermo con una fpga. per chi non lo sapesse, una FPGA (sintetizzando) permette di creare circuiti logici a partire da operazioni di base quali and, or, not e via dicendo. ciò può punzionare sia tramite grafica che tramite programmazione, nella fattispecie noi usiamo vhdl. Si può usare verilog, ci sono compatibilità con tk/tcl, ma siccome il nostro prof al di fuori di due istruzioni di vhdl non sa molto altro, noi aspiranti ing. dobbiamo risolvere il tutto col vhdl. Sono riuscito a far funzionare la VGA con tutte le mentae di sincronia verticale, orizzontale e via dicendo. ora come ora riesco a gestire in amniera abbastanza indipendente due pixel sullo schermo, e ne sono felice (non perchè sia difficile, quanto perchè so ESATTAMENTE come funziona tutto quello che ho implementato fino ad ora). Il problema che mi ritrovo adesso, è di dover connettere questi due pixel (o chiamiamoli punti) tramite una linea retta(o similretta, volendo essere precisi) su uno schermo settato 800x600. Solo che non ho la più pallida idea su come fare una routine che mi calcoli tutti i punti (o pixel) che devono essere dipinti sullo schermo. NON sono disponibili funzioni goniometriche, in vhdl. tutto quello che posso usare, a meno di non implementarmi sin e cos, sono addizione e moltiplicazione (ovviamente i reciproci, sottrazione e divisione). Pensavo di andarmi ad apire una qualche funzione che dati due punti traccia una retta in C#, C++ o pascal, purtroppo non ho trovato niente di utile fino ad ora (vuoi per incompetenza mia, vuoi perchè ho cercato male...) Qualcuno ha idee, suggerimenti,consigli, righe di codice a disposizione? Link al commento Condividi su altri siti More sharing options...
Dusdan Inviato 30 Luglio 2008 Segnala Condividi Inviato 30 Luglio 2008 velocemente, la cosa non e` propriamente banale, per una serie di motivi: - seno e coseno c'entrano poco, visto che per calcolare l'equazione della retta non servono - il problema principale e` decidere quali pixel accendere, perche` come criterio non basta "la retta passa per il quadretto" altrimenti avresti una cosa orrenda - c'e` poi l'aliasing della riga quasi verticale o quasi orizzontale, ma questo forse non ti tange piu` di tanto non ho mai fatto una cosa del genere, ma andando un po' a brainstorming: - calcoli il primo e l'ultimo pixel - calcoli il numero di pixel in mezzo - calcoli la retta in n punti e vedi in che quadretto sei non verra` un capolavoro, soprattutto per angolazioni strane, ma dovrebbe fungere. non mi sembra ci siano operazioni matematiche complesse, in caso ricordo che sin(x) ~= x - x^3/6 cos(x) ~= 1 - x^2/2 (mi pare) Link al commento Condividi su altri siti More sharing options...
Phate Inviato 31 Luglio 2008 Autore Segnala Condividi Inviato 31 Luglio 2008 velocemente, la cosa non e` propriamente banale, per una serie di motivi: - seno e coseno c'entrano poco, visto che per calcolare l'equazione della retta non servono a dire il vero pensavo di utilizzare l'equazione parametrica di una retta, tanto per veder il coefficiente angolare della retta e poi andare ad accendere i pixel in una vartianza abbastranza accettabile. - calcoli la retta in n punti e vedi in che quadretto sei [....] cos(x) ~= 1 - x^2/2 (mi pare) scrivere 1-|x| ti sembrava tanto brutto? per "la retta in n punti" intendi dire la distanza n tra un pixel e l'altro... mmmh... sembra fattibile così. tra oggi e domani vedo di abbozzare qualcosa di simil funzionante... Link al commento Condividi su altri siti More sharing options...
Dusdan Inviato 31 Luglio 2008 Segnala Condividi Inviato 31 Luglio 2008 scrivere 1-|x| ti sembrava tanto brutto? intendevo 1-.5*x^2, e ovviamente vale solo per x piccolo. per "la retta in n punti" intendi dire la distanza n tra un pixel e l'altro... mmmh... sembra fattibile così. tra oggi e domani vedo di abbozzare qualcosa di simil funzionante... bravo, poi ti mando la fattura Link al commento Condividi su altri siti More sharing options...
Aerys II Inviato 18 Agosto 2008 Segnala Condividi Inviato 18 Agosto 2008 Tanto per curiosità, hai "abbozzato qualcosa di simil funzionante" o era l'ennesimo tuo delirio, tipo quello del piombo in oro o quello che vedeva coinvolti te, un portatile e il Pentagono? Link al commento Condividi su altri siti More sharing options...
Phate Inviato 18 Agosto 2008 Autore Segnala Condividi Inviato 18 Agosto 2008 ho buttato giù solo uno schema a blocchi per il momento. Non ho ancora avuto tempo di mettermi a smanettare sul codice per svariati motivi, tra i quali (in ordine di importanza) fino ad oggi, proprio voglia zero fino a 5 giorni fa, barcellona e momentanee ferie infra esami al momento, sto studiando i teoremi di algebra lineare che devo darlo a breve. Lo so, sono un fecaloma ad averlo lasciato così indietro e così via. mi manca la schedina della xilinx, che o trafugo dal laboratorio o la compro per averla a casa. Indi per cui, dopo aver testato il lavoro fatto fino ad ora (codec vga e il pixel mobile) provvederò a fare il codice e finire il tutto. per la cronoaca, non sono riuscito a trasformare con quella pietra il piombo in oro, ma ho trasformato il pentagono in un portatile (grazie alla pietra intendo dire) Link al commento Condividi su altri siti More sharing options...
Messaggio consigliato
Crea un account o accedi per commentare
Devi essere un utente registrato per poter lasciare un commento
Crea un account
Crea un nuovo account e registrati nella nostra comunità. È facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora