Oi, eu estava fazendo o EP, mas parece q quanto mais me aprofundo no nivel, o comprimento do fractal vai diminuindo. Isso acontece porque na função eu uso
void a(Imagem imagem, int k, int *x, int *y, int comprimento);
Então, eu deveria usar double e não int como tipo pro comprimento, certo?
Bom, fiz isso, e pro nível 4, apesar dele ficar meio achatado, melhorou muito do que estava antes, mas pro nível 5 fica impossível, pois ele fica com comprimento 0 pro y! Dai, ele desenha uma reta soh no nível 5. Acho q tem problemas na aproximação porque é preciso passar um int pra q ele possa desenhar. Quem pode me ajudar?
Bom uma vez que você define o tamanho da imagem você vai estar limitando a ordem maxima desta imagem.
Você não deve usar double pelo motivo de que a imagem possui pixels inteiros e não há meio pixel.
Logo se você quer desenhar uma curva de nivel 5 o que me vem a mente seria almentar o tamanho inicial da imagem.
Outra coisa é que não sei como você define o tamanho do comprimento, mas parece logico que se defina a partir de uma porcentagem da imagem, algo do genero você pode usar uma maximo de 90% da imagem então temos de achar uma regra para saber quantos comprimentos serão necessários.
A partir do exemplo acima se eu criar uma imagem de tamanho 0 não poderei nem desenhar koch de ordem 1, logo o que delimita a ordem é o tamanho inicial.
Espero que tenha respondido.
Pedro Musa
Você não deve usar double pelo motivo de que a imagem possui pixels inteiros e não há meio pixel.
Logo se você quer desenhar uma curva de nivel 5 o que me vem a mente seria almentar o tamanho inicial da imagem.
Outra coisa é que não sei como você define o tamanho do comprimento, mas parece logico que se defina a partir de uma porcentagem da imagem, algo do genero você pode usar uma maximo de 90% da imagem então temos de achar uma regra para saber quantos comprimentos serão necessários.
A partir do exemplo acima se eu criar uma imagem de tamanho 0 não poderei nem desenhar koch de ordem 1, logo o que delimita a ordem é o tamanho inicial.
Espero que tenha respondido.
Pedro Musa
Dá para usar double para controlar melhor as coordenadas e o comprimento que estão sendo usados. Só na hora de chamar a função DesenhaSegmento é que precisa arredondar para inteiro.
Fazendo assim, o acúmulo de erros de arredondamento é bem menor.
Zé Augusto
Fazendo assim, o acúmulo de erros de arredondamento é bem menor.
Zé Augusto
Como arredonda um double para inteiro?
Na abribuição de um valor double para uma variável inteira o valor é truncado. Por exemplo:
Zé Augusto
int n;Sabendo isso, dá para usar a imaginação e dar um jeito para fazer o arredondamento. Por exemplo, se
n = 4.9; /* resulta em n == 4 */
n = -1.9; /* resulta em n == -1 */
x
é uma variável double com valor não-negativo, dá para arredondar o valor de x
para uma variável inteira usando a atribuição
n = x + 0.5;Isso não funciona se o valor de
x
é negativo.
Zé Augusto
Tambem não consegui fazer tal controle...
...meu problema é o mesmo, na ordem 5 fica só uma reta..., e além disso a posição da figura a partir da ordem 4 já fica descentralizada...
...como eu posso arrumar isso?
...meu problema é o mesmo, na ordem 5 fica só uma reta..., e além disso a posição da figura a partir da ordem 4 já fica descentralizada...
...como eu posso arrumar isso?