Um probleminha!

Um probleminha!

por Luciana Ishihara -
Número de respostas: 5
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?
Em resposta à Luciana Ishihara

Re: Um probleminha!

por Pedro Musa -
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
Em resposta à Pedro Musa

Re: Um probleminha!

por José Augusto Soares -
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
Em resposta à José Augusto Soares

Re: Um probleminha!

por Renato Vieira -
Como arredonda um double para inteiro?
Em resposta à Renato Vieira

Re: Um probleminha!

por José Augusto Soares -
Na abribuição de um valor double para uma variável inteira o valor é truncado. Por exemplo:
int n;

n = 4.9; /* resulta em n == 4 */
n = -1.9; /* resulta em n == -1 */
Sabendo isso, dá para usar a imaginação e dar um jeito para fazer o arredondamento. Por exemplo, se 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
Em resposta à José Augusto Soares

Re: Um probleminha!

por Rafael Kenji Murayama -
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?