Matematica pura, fisica, chimica, ecc.: compiti di allenamento del cervello che non hanno nulla a che fare con il commercio [Parte 2] - pagina 20

 

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.

 
TheXpert:

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.

 
TheXpert:

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.
 
TheXpert:
In breve, probabilmente calcolerei i punti nel sistema polare e poi toglierei quelli extra secondo il principio dell'8-linkage.

Farò un tentativo.
 
Integer:


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

 
Avals:


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!
 
TheXpert:
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.