Un'ellisse e un cerchio appiattito sono la stessa cosa.
Quindi, c'è un'equazione - x^2/a^2 + y^2/b^2 = 1 - che è un'ellisse. (1)
Inoltre, c'è una trasformazione. Esprimere x y per x' y' non è un problema. Anche la sostituzione nella (1) non è un problema.
Poi facciamo un ciclo su x con incrementi di 1 e un ciclo su y con incrementi di 1.
E poi misuriamo questi punti, non è così difficile.
L'unico problema è la gamma di valori. È qui che bisogna pensarci.
Se un cerchio appiattito e un'ellisse sono uguali, allora y=k*sqr(r^2-x^2) è un'ellisse.
Se si ottiene y da x e lo si ruota, si ottengono angoli di pixel (per esempio pixel, pixel inferiore e pixel destro). Qualsiasi setacciamento di pixel e il collegamento dei punti risultanti con una linea apparirà storto. Provato in vari modi. L'unico modo carino è la funzione y' da x', se i punti sono più distanti di un pixel, allora collegali con una linea.
Se il cerchio appiattito e l'ellisse sono uguali, allora y=k*sqr(r^2-x^2) è un'ellisse.
Se si ottiene y da x e si ruota, ci saranno degli angoli di pixel (per esempio pixel, pixel inferiore e pixel destro). Qualsiasi setacciamento dei pixel e il collegamento dei punti risultanti con una linea apparirà storto. Provato in vari modi. L'unico modo carino è in funzione di y' da x', se i punti sono più distanti di un pixel, allora collegali con una linea.
È necessario disegnarlo in un solo colore o si può fare l'antialiasing in un'immagine? Se si tratta di levigare, si può cercare un'implementazione pronta dell'algoritmo di Bresenham per l'ellisse
Devo farlo in un solo colore o posso farlo in un raster antialias? Se lo smoothing, si può cercare un'implementazione pronta dell'algoritmo di Bresenham per l'ellisse
In un colore, se con l'antialiasing, dovrete fare tutto con l'antialiasing.
* * *
Immagino che l'ellisse non ci sarà fino alla prossima stagione :)
Qualcosa è venuto fuori, ovviamente. Non l'ho davvero inventato io, ho visto come Renat ha disegnato un cerchio. Controlla l'intera area, se il punto è dentro o fuori la figura. Poi avvicinatevi alla figura pronta da quattro lati e coloratene il contorno. C'è un altro inconveniente con questo caso - se non è un'ellisse ruotata, è necessario calcolare e riflettere per un quarto. Se è un'ellisse ruotata, dovete calcolare per metà di essa e rifletterla. Voglio anche fare una tacca per disegnare settori e fette...
In parte, ma non del tutto. In un'area quadrata per ogni x e y, prima ruotiamo, trasformiamo le x e y ruotate in coordinate polari - otteniamo la distanza del punto dal centro (r) e l'angolo (fi), dall'angolo fi, dato raggio e coefficiente calcoliamo la distanza del punto estremo dell'ellisse dal centro, confrontiamo con r e scopriamo se il punto è dentro o no.
In ogni caso, dovrete dividerlo in quarti o metà e riflettere.
Se disegnate subito in coordinate polari, dovrete pulire alcuni punti dopo, e se disegnate in solido, è più facile contornarlo dopo. Forse non è così, ma ovviamente ci sono più complicazioni di quanto sembri.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
In coordinate polari, tutto andrà bene lì. Ma quando si passa alle coordinate normali, viene fuori la stessa cosa.
Qual è la risposta breve? Devi ballare dai fornelli. Se si valuta l'area dei valori, allora la riduzione a questa forma non è necessaria.
_____________
A proposito, non è difficile ottenere i coefficienti dell'equazione.
E un'altra cosa a proposito -- l'ellisse originale prima della rotazione non è espressa da una tale funzione.
In coordinate polari, tutto andrà bene lì. Ma quando si passa alle coordinate normali, viene fuori la stessa cosa.
Qual è la risposta breve? Devi ballare dai fornelli. Se si valuta l'area dei valori, allora la riduzione a questa forma non è necessaria.
_____________
A proposito, non è difficile ottenere i coefficienti dell'equazione.
E un'altra cosa a proposito -- l'ellisse originale prima della rotazione non è espressa da una tale funzione.
Il compito è quello di disegnare un'ellisse ruotata pixel per pixel. Non un'ellisse, ma va bene anche un cerchio appiattito.
Un'ellisse e un cerchio appiattito sono la stessa cosa.
Quindi, c'è un'equazione - x^2/a^2 + y^2/b^2 = 1 - che è un'ellisse. (1)
Inoltre, c'è una trasformazione. Esprimere x y per x' y' non è un problema. Anche la sostituzione nella (1) non è un problema.
Poi facciamo un ciclo su x con incrementi di 1 e un ciclo su y con incrementi di 1.
E poi misuriamo questi punti, ed è abbastanza facile.
L'unico problema è l'area dei valori. È qui che bisogna pensarci.
Un'ellisse e un cerchio appiattito sono la stessa cosa.
Quindi, c'è un'equazione - x^2/a^2 + y^2/b^2 = 1 - che è un'ellisse. (1)
Inoltre, c'è una trasformazione. Esprimere x y per x' y' non è un problema. Anche la sostituzione nella (1) non è un problema.
Poi facciamo un ciclo su x con incrementi di 1 e un ciclo su y con incrementi di 1.
E poi misuriamo questi punti, non è così difficile.
L'unico problema è la gamma di valori. È qui che bisogna pensarci.
Se un cerchio appiattito e un'ellisse sono uguali, allora y=k*sqr(r^2-x^2) è un'ellisse.
Se si ottiene y da x e lo si ruota, si ottengono angoli di pixel (per esempio pixel, pixel inferiore e pixel destro). Qualsiasi setacciamento di pixel e il collegamento dei punti risultanti con una linea apparirà storto. Provato in vari modi. L'unico modo carino è la funzione y' da x', se i punti sono più distanti di un pixel, allora collegali con una linea.
In breve, probabilmente calcolerei i punti nel sistema polare e poi toglierei quelli extra secondo il principio dell'8-linkage.
Farò un tentativo.
Se il cerchio appiattito e l'ellisse sono uguali, allora y=k*sqr(r^2-x^2) è un'ellisse.
Se si ottiene y da x e si ruota, ci saranno degli angoli di pixel (per esempio pixel, pixel inferiore e pixel destro). Qualsiasi setacciamento dei pixel e il collegamento dei punti risultanti con una linea apparirà storto. Provato in vari modi. L'unico modo carino è in funzione di y' da x', se i punti sono più distanti di un pixel, allora collegali con una linea.
È necessario disegnarlo in un solo colore o si può fare l'antialiasing in un'immagine? Se si tratta di levigare, si può cercare un'implementazione pronta dell'algoritmo di Bresenham per l'ellisse
P.S. Ecco un'altra cosa che ho trovato su http://www.geometrictools.com/Documentation/IntegerBasedEllipseDrawing.pdf
Devo farlo in un solo colore o posso farlo in un raster antialias? Se lo smoothing, si può cercare un'implementazione pronta dell'algoritmo di Bresenham per l'ellisse
P.S. Ecco altro da http://www.geometrictools.com/Documentation/IntegerBasedEllipseDrawing.pdf
In un colore, se con l'antialiasing, dovrete fare tutto con l'antialiasing.
* * *
Immagino che l'ellisse non ci sarà fino alla prossima stagione :)
Qualcosa è venuto fuori, ovviamente. Non l'ho davvero inventato io, ho visto come Renat ha disegnato un cerchio. Controlla l'intera area, se il punto è dentro o fuori la figura. Poi avvicinatevi alla figura pronta da quattro lati e coloratene il contorno. C'è un altro inconveniente con questo caso - se non è un'ellisse ruotata, è necessario calcolare e riflettere per un quarto. Se è un'ellisse ruotata, dovete calcolare per metà di essa e rifletterla. Voglio anche fare una tacca per disegnare settori e fette...
Integer:
Se ruotato, calcolare per metà e riflettere. Voglio anche fare una tacca per disegnare settori, fette...
Soprattutto le coordinate polari!
In parte, ma non del tutto. In un'area quadrata per ogni x e y, prima ruotiamo, trasformiamo le x e y ruotate in coordinate polari - otteniamo la distanza del punto dal centro (r) e l'angolo (fi), dall'angolo fi, dato raggio e coefficiente calcoliamo la distanza del punto estremo dell'ellisse dal centro, confrontiamo con r e scopriamo se il punto è dentro o no.
In ogni caso, dovrete dividerlo in quarti o metà e riflettere.
Se disegnate subito in coordinate polari, dovrete pulire alcuni punti dopo, e se disegnate in solido, è più facile contornarlo dopo. Forse non è così, ma ovviamente ci sono più complicazioni di quanto sembri.