No topo da minha cabeça, a cláusula que se destaca para mim é que você deseja que a área seja constante. Isso me parece a dor de tudo isso, então vamos tentar encontrar uma solução fácil para isso.
Pegue um pedaço de barbante e amarre as pontas para formar um círculo. Posso estar errado, mas minha intuição diz que o interior dessa corda tem uma área constante, ou que atuaria muito como o limite da sua ameba.
Então eu diria: implemente a string. ;) A maioria das bibliotecas de física pode fazer molas (no Box2D isso se parece com a junta de distância), e a maneira mais fácil de criar uma string é conectar muitas strings. Junte o último até o primeiro para criar um loop. Certifique-se de que as molas da corda tenham uma constante de mola alta o suficiente para não se esticarem - você quer que elas sejam bastante rígidas e se movam em uníssono, para não se expandir.
Em seguida, crie forças para atuar na string. Trivialmente, seus dois núcleos / olhos / pontos de controle criam forças nos pontos que compõem a corda. Faça a força cair com uma função quadrada inversa:
float forceOnPoint(point, ball)
{
float d = distance(point, ball);
return K / (d*d);
}
E direcione a força diretamente para longe do olho / bola de controle, como uma força repelente que emana da bola. Aperte K para controlar a força da força. Certifique-se de que K não seja muito alto - você não quer que ele seja empurrado massivamente pela força, apenas mantenha-o longe das bolas. Deixe muita folga na corda.
Com apenas esses dois, você provavelmente terá uma forma bastante uniforme, então eu também sugiro que você crie algumas forças mais fracas ao redor da 'sopa' ao redor para mudar a forma da ameba. Você pode fazer esses lugares aleatórios, mudar sua força regularmente (você pode torná-la uma função sinusóide para movimentos agradáveis) e fazê-los funcionar da mesma maneira que as bolas.
Vaginação (fnarr): essa é a difícil. Você faz com que ele envolva um objeto, verificando se dois pontos não adjacentes na sequência conseguiram se aproximar o suficiente e, se for o caso, é necessário:
Meça a distância entre os pontos na corda. Conte o número de seções da mola. Encontre o caminho 'mais curto' de A a B.
Quebre a corda e junte-a novamente com os dois pontos adjacentes. Em outras palavras, junte diretamente o ponto A ao ponto B e descarte todas as coisas no meio.
Reinsira o número de pontos ausentes (mais pontos de bônus, se você quiser expandir em tamanho comendo alguma coisa) na sequência do outro lado - ou seja, o lado de B a A. Se você os inserir igualmente ao longo do comprimento e Para torná-los menores que a distância desejada entre os pontos, você deve obter um bom efeito de expansão elástica.
Eu acho que cobre tudo. A propósito: a ideia parece incrível.