dermeister
Ent cara-de-pau
Desenhe um iceberg bidimensional e veja como ele vai flutuar: https://joshdata.me/iceberger.html
Bobinho e divertido. Fica mais bobo e mais divertido depois de estudar como funciona e o código que o sujeito lá escreveu é bem didático para uma análise rápida.
Edit: Muitos typos e aff.
Bobinho e divertido. Fica mais bobo e mais divertido depois de estudar como funciona e o código que o sujeito lá escreveu é bem didático para uma análise rápida.
O Javascript está legível e tenho certeza que se você abriu esse spoiler, você já foi fuçar lá também. O que ele faz é basicamente calcular os centros de massa do polígono que representa o iceberg e da parte submersa (usando a biblioteca turfjs para fazer o corte na linha d'água), determinar uma força de gravidade que puxa para baixo pelo baricentro do iceberg inteiro e uma de empuxo para cima pelo baricentro da parte submersa. Depois aplica uma leve translação em função do vetor resultante dessas duas e uma leve rotação usando esse mesmo vetor, e recalcula a posição de todos os vértices do polígono.
O código é iterativo e repete esse processo indefinidamente, mas como as mudanças são cada vez menores ele se estabiliza e parece ficar parado.
Tem um comentário lá que chamou minha atenção: a forma como ele calcula áreas é vulnerável a gerar áreas com valor negativo e tem uma etapa de validação para remover formas exóticas que disparam o bug. Removendo esse código dá para brincar de criar um iceberg voador: desenhe um "8" ou uma gravata borboleta (com as linhas centrais se cruzando, não basta aproximar) e com a área das duas partes aproximadamente igual. Isso vai fazer o código gerar a área negativa e usá-la para o cálculo do baricentro e das forças.
O código é iterativo e repete esse processo indefinidamente, mas como as mudanças são cada vez menores ele se estabiliza e parece ficar parado.
Tem um comentário lá que chamou minha atenção: a forma como ele calcula áreas é vulnerável a gerar áreas com valor negativo e tem uma etapa de validação para remover formas exóticas que disparam o bug. Removendo esse código dá para brincar de criar um iceberg voador: desenhe um "8" ou uma gravata borboleta (com as linhas centrais se cruzando, não basta aproximar) e com a área das duas partes aproximadamente igual. Isso vai fazer o código gerar a área negativa e usá-la para o cálculo do baricentro e das forças.
Edit: Muitos typos e aff.
Última edição: