MATEMÁTICA APLICADAComo saber qual equação usar? Tópico resolvido

Aplicações e soluções para o dia-a-dia.

Moderador: [ Moderadores TTB ]

Avatar do usuário
Autor do Tópico
FabioZumbi12
iniciante
Mensagens: 5
Registrado em: Qui 10 Jul, 2014 21:53
Última visita: 16-07-14
Localização: São Paulo
Contato:
Jul 2014 15 08:08

Como saber qual equação usar?

Mensagem não lida por FabioZumbi12 »

Olá,
Muito obrigado por me aceitarem no fórum, e vou ser cincero, estou aqui pois não consegui resolver um problema matemático que estou tendo para programar e usar no meu site. Bom, vamos para o que interessa.

Preciso converter um valor de experiencias que obtenho do jogo para leveis, e mostrar no meu site. Eu tenho as seguinter informações:
XP = Experiencias
LVL = Leveis

De XP 0 até 292, eu uso a equação: [tex3]\frac{XP}{17}=LVL[/tex3]
Exemplo: [tex3]\frac{272}{17}=16 LVLs[/tex3]
Então a progressão é de 17 em 17 de 0 até 272.

O problema é que depois de 292 até 825 LVLs, a equação muda, e de 887 até [tex3]\infty[/tex3] é outra! Porém, eu eu ja sei que:

Usando a equação adequada para o intervalo 292 até 825 LVLs tenho:
292 XPs = 17 LVLs
825 XPs = 30 LVLs

E para o intervalo 887 até [tex3]\infty[/tex3] sei que:
887 XPs = 31 LVLs
1760 XPs = 40 LVLs

Qual a lógica da progressão ou equação para os 2 casos? Usaria PA pra resolver? Tem tbm uma tabela do próprio wiki do jogo:
Coluna 1: LVLs | Coluna 2: XPs | Coluna 3: XPs para o próximo nivel
1 17 17
2 34 17
3 51 17
4 68 17
5 85 17
6 102 17
7 119 17
8 136 17
9 153 17
10 170 17
11 187 17
12 204 17
13 221 17
14 238 17
15 255 17
16 272 17
17 292 20
18 315 23
19 341 26
20 370 29
21 402 32
22 437 35
23 475 38
24 516 41
25 560 44
26 607 47
27 657 50
28 710 53
29 766 56
30 825 59
31 887 62
32 956 69
33 1032 76
34 1115 83
35 1205 90
36 1302 97
37 1406 104
38 1517 111
39 1635 118
40 1760 125

Obrigado desde já, e se o problema for bom da até pra usar em provas pois muitos players q eu dei pra tentar resolver não conseguiram..rsrs

Última edição: FabioZumbi12 (Ter 15 Jul, 2014 08:08). Total de 1 vez.



Avatar do usuário
csmarcelo
6 - Doutor
Mensagens: 5114
Registrado em: Sex 22 Jun, 2012 22:03
Última visita: 17-04-23
Jul 2014 15 10:36

Re: Como saber qual equação usar?

Mensagem não lida por csmarcelo »

Estando no nível 16, é preciso de 20 pontos de experiência para evoluir para o nível 17. A partir daí, a quantidade de pontos por nível para cada nível aumenta de 3 pontos.

Temos, então, uma PA onde a_1=20 e q=3.

Soma dos termos de uma PA = \frac{n\cdot(a_1+a_n)}{2}, sendo n=\text{ nivel atual}-16 e a_n=a_1+q(n-1).

O resultado da fórmula acima te dará a quantidade total de experiência necessária para chegar àquele nível a partir do nível 16. Então, para se ter a quantidade total de experiência necessária para ir do nível 0 ao nível em questão, faz-se:

272+\frac{n\cdot(a_1+a_n)}{2}

No entanto, o que queremos é justamente o contrário, ou seja, saber o nível a partir do total de experiência acumulada. Logo, temos que isolar n na equação, visto que n=\text{ nivel atual}-16\rightarrow\text{ nivel atual }=n+16

Ao tentar isolarmos n, chegaremos à uma equação do segundo grau:

qn^2+(2\cdot a_1-q)n-2(EXP-272)=0\rightarrow n=\frac{(q-2\cdot a_1)+\sqrt{(2\cdot a_1-q)^2+8q(EXP-272)}}{2q} e, portanto,

\text{nivel atual}=\frac{(q-2\cdot a_1)+\sqrt{(2\cdot a_1-q)^2+8q(EXP-272)}}{2q}+16

Para o intervalo [887,\infty[, o raciocínio é o mesmo. A diferença é que a1=62, q=7 e, ao invés de subtrairmos 272 na fórmula final, subtrairemos 825.

Última edição: csmarcelo (Ter 15 Jul, 2014 10:36). Total de 1 vez.



Avatar do usuário
Autor do Tópico
FabioZumbi12
iniciante
Mensagens: 5
Registrado em: Qui 10 Jul, 2014 21:53
Última visita: 16-07-14
Localização: São Paulo
Contato:
Jul 2014 15 11:15

Re: Como saber qual equação usar?

Mensagem não lida por FabioZumbi12 »

Uau, então era complexo mesmo? Só para eu entender, ficamos assim:

De XP 0 até 272, eu uso a equação: [tex3]\frac{XP}{17}=LVLs[/tex3]

De 292 até 825, q=3, [tex3]a_{1}[/tex3] =20 , e eu uso: [tex3]\frac{(q-2\cdot a_1)+\sqrt{(2\cdot a_1-q)^2+8q(EXP-272)}}{2q}+16= LVLs[/tex3]

De 887 até [tex3]\infty[/tex3] , q=7 e [tex3]a_{1}=62[/tex3] , e eu uso: [tex3]\frac{(q-2\cdot a_1)+\sqrt{(2\cdot a_1-q)^2+8q(EXP-825)}}{2q}+16= LVLs[/tex3]

Me desculpe a dificuldade mas tem gente que nasce pra matemática,outros não, e eu sou um dos que não..rs

Parece que vc conseguiu solucionar, porém ainda preciso da sua ajuda para usá-la:

Tem como essa fórmula ser simplificada? Terei que usar em código php e não faço idéia de como usa-la usando a raiz quadrada e elevação;

Pelo que entendi, onde tiver q, terei que substituir por 3 na equação 2, e por 7 na terceira certo? Tem como vc exmeplificar ou simplificar pra eu precisar apenas colocar o XP?

Encontrei isso também no Wiki do jogo:

for x≤15: 17x
for 16≤x≤31: 1.5x² - 29.5x + 360
for x≥30: 3.5x² - 151.5x + 2220

Se servir pra alguma coisa...

Muito obrigado por ajudar a resolver :) Vou tentando usar ela aqui!
Última edição: FabioZumbi12 (Ter 15 Jul, 2014 11:15). Total de 1 vez.



Avatar do usuário
csmarcelo
6 - Doutor
Mensagens: 5114
Registrado em: Sex 22 Jun, 2012 22:03
Última visita: 17-04-23
Jul 2014 15 12:07

Re: Como saber qual equação usar?

Mensagem não lida por csmarcelo »

De 887 até \infty, q=7 e a_{1}=62, e eu uso: \frac{(q-2\cdot a_1)+\sqrt{(2\cdot a_1-q)^2+8q(EXP-825)}}{2q}+16= LVLs
Fabio, nesse caso, não se soma 16, mas 30, que o nível anterior ao nível a partir do qual o novo cálculo passa a valer. Esqueci desse detalhe.
Encontrei isso também no Wiki do jogo:

for x≤15: 17x
for 16≤x≤31: 1.5x² - 29.5x + 360
for x≥30: 3.5x² - 151.5x + 2220

Se servir pra alguma coisa...
Essas fórmulas calculam a experiência em função do nível. A expressão da segunda linha equivale à seguinte expressão que coloquei no meu desenvolvimento:

272+\frac{n\cdot(a_1+a_n)}{2}

Se você expandir essa expressão e substituir as variáveis, ou seja, fizer a_1=20, q=3 e n=\text{nivel atual}-16, você chegará à expressão 1,5x^2-29,5x+360.

Se EXP=1,5x^2-29,5x+360, então, 1,5x^2-29,5x+360-EXP=0 e, então,

x=\frac{29,5+\sqrt{(-29,5)^2-4\cdot1,5\cdot(360-exp)}}{2\cdot1,5}=\frac{29,5+\sqrt{870,25-6\cdot(360-exp)}}{3}

As minhas fórmulas são simplesmente generalizações.
Última edição: csmarcelo (Ter 15 Jul, 2014 12:07). Total de 1 vez.



Avatar do usuário
csmarcelo
6 - Doutor
Mensagens: 5114
Registrado em: Sex 22 Jun, 2012 22:03
Última visita: 17-04-23
Jul 2014 15 12:15

Re: Como saber qual equação usar?

Mensagem não lida por csmarcelo »

Ah, e além disso não tem como simplificar, mas com certeza no PHP existem funções para o cálculo da raiz quadrada e para efetuação de potenciação.

Eu, particularmente, ficaria com as fórmula genéricas. Isso permitirá reaproveitamento de código e, consequentemente, melhor manutenção.

Você conhece Java? Se sim, eu posso implementar nessa linguagem para você ver como ficaria.



Avatar do usuário
Autor do Tópico
FabioZumbi12
iniciante
Mensagens: 5
Registrado em: Qui 10 Jul, 2014 21:53
Última visita: 16-07-14
Localização: São Paulo
Contato:
Jul 2014 15 12:20

Re: Como saber qual equação usar?

Mensagem não lida por FabioZumbi12 »

Realmente tem funções sim em PHP, vou tentar aplicar no meu código e ver os resultados. Faz muito tempo que não contato com estes calculos mais complicados por isso a dificuldade de aplicá-los.

Por hora, axo que terei que calcular os itens de dentro da raiz, depois resolver a raiz, depois as somas, depois a divisão de todos pelo 2q, e então somar 16(ou 30) no segundo caso. Essa será a solução né?

(estou fazendo enquanto isso)



Avatar do usuário
csmarcelo
6 - Doutor
Mensagens: 5114
Registrado em: Sex 22 Jun, 2012 22:03
Última visita: 17-04-23
Jul 2014 15 12:25

Re: Como saber qual equação usar?

Mensagem não lida por csmarcelo »

Isso aí, basta substituir os valores e resolver a equação.



Avatar do usuário
csmarcelo
6 - Doutor
Mensagens: 5114
Registrado em: Sex 22 Jun, 2012 22:03
Última visita: 17-04-23
Jul 2014 15 12:52

Re: Como saber qual equação usar?

Mensagem não lida por csmarcelo »

Fabio,

Veja abaixo como eu implementaria em Java.

O código começa a ser executado no procedimento main e a única coisa que ele faz é chamar 5 vezes a função nivel, que retorna o nível da personagem em função da experiência passada como parâmetro.

A função nivel, por sua vez, implementa a condicional para saber que cálculo utilizar, dependendo da quantidade de experiência que a personagem possui.

Nas fórmulas que postei anteriormente, o valor somado ao final da expressão (16 ou 30), assim como os valores de experiência necessários para se alcançar o último nível da classe de cálculo imediatamente anterior (272 ou 825) estavam fixos. Na implementação, eles são parâmetros e, assim, temos uma fórmula única, implementada na função calculoComplicadoDoNivel, para o cálculo do nível quando a experiência for acima de 272.

Código: Selecionar todos

public class CalculoDeNivel {

	private static int calculoComplicadoDoNivel(int a1, int q, int EXP_ATUAL, int EXP_INICIAL, int LVL_INICIAL) {
		return (int) ((q-2*a1)+Math.sqrt(Math.pow(2*a1-q, 2)+8*q*(EXP_ATUAL-EXP_INICIAL)))/(2*q)+LVL_INICIAL;
	}
	
	private static int nivel(int EXP_ATUAL) {
		int nivel = 0;
		
		if (EXP_ATUAL < 0) return 0;
		
		if (EXP_ATUAL <= 272)
			nivel = (int) EXP_ATUAL/17;
		
		else if (EXP_ATUAL <= 825)
			nivel = calculoComplicadoDoNivel(20, 3, EXP_ATUAL, 272, 16);
		
		else
			nivel = calculoComplicadoDoNivel(62, 7, EXP_ATUAL, 825, 30);
		
		return nivel;
		
	}

	public static void main(String arg[]) {
		System.out.println(nivel(154));
		System.out.println(nivel(272));
		System.out.println(nivel(705));
		System.out.println(nivel(1200));
		System.out.println(nivel(1517));
	}	
}
Última edição: csmarcelo (Ter 15 Jul, 2014 12:52). Total de 1 vez.



Avatar do usuário
Autor do Tópico
FabioZumbi12
iniciante
Mensagens: 5
Registrado em: Qui 10 Jul, 2014 21:53
Última visita: 16-07-14
Localização: São Paulo
Contato:
Jul 2014 15 13:35

Re: Como saber qual equação usar?

Mensagem não lida por FabioZumbi12 »

Hummm, seu exemplo me ajudou a fazer minha função no PHP, pois as chamadas de raiz a elevação são as mesmas, apenas removendo o Math.:

Código: Selecionar todos

function xptolvl( $a1, $q, $EXP_ATUAL, $EXP_INICIAL, $LVL_INICIAL) {
			return ($q-2*$a1)+\sqrt(pow(2*$a1-$q, 2)+8*$q*($EXP_ATUAL-$EXP_INICIAL))/(2*$q)+$LVL_INICIAL;
			}
Mas estou tendo o valor: -0,833333333333

E estou chamando usando:

Código: Selecionar todos

$lvl = xptolvl(20, 3, 825, 272, 16);
O que será?
Última edição: FabioZumbi12 (Ter 15 Jul, 2014 13:35). Total de 1 vez.



Avatar do usuário
csmarcelo
6 - Doutor
Mensagens: 5114
Registrado em: Sex 22 Jun, 2012 22:03
Última visita: 17-04-23
Jul 2014 15 13:45

Re: Como saber qual equação usar?

Mensagem não lida por csmarcelo »

Você "engoliu" um par de parênteses.
function xptolvl( $a1, $q, $EXP_ATUAL, $EXP_INICIAL, $LVL_INICIAL) {
return (($q-2*$a1)+\sqrt(pow(2*$a1-$q, 2)+8*$q*($EXP_ATUAL-$EXP_INICIAL)))/(2*$q)+$LVL_INICIAL;
}

Última edição: csmarcelo (Ter 15 Jul, 2014 13:45). Total de 1 vez.



Responder
  • Tópicos Semelhantes
    Respostas
    Exibições
    Última msg

Voltar para “MATEMÁTICA APLICADA”