Я пытаюсь создать случайные, выпуклые, несамопересекающиеся многоугольники - quadrilaterals.Как я могу сделать квадраты?
я получил, насколько:
function randquad(){
var bodyDef = new b2BodyDef,
fixDef = new b2FixtureDef,
x=0, y=0;
fixDef.density = Math.random();
fixDef.friction = Math.random();
fixDef.restitution = Math.random()*0.3;
bodyDef.type = b2Body.b2_dynamicBody;
fixDef.shape = new b2PolygonShape;
fixDef.shape.SetAsArray([
new b2Vec2(x, y),
new b2Vec2(x+=Math.random()*2, y+=Math.random()*2*(Math.random()<0.5?1:-1)),
new b2Vec2(x+=Math.random()*2*(Math.random()<0.5?1:-1), y+=Math.random()*2),
new b2Vec2(x-=Math.random()*2, y+=Math.random()*2*(Math.random()<0.5?1:-1))
]);
bodyDef.position.x = Math.random() * 10;
bodyDef.position.y = 0;
world.CreateBody(bodyDef).CreateFixture(fixDef);
}
Я работаю с Box2D сети; однако этот вопрос не ограничивается этим, или javascript - его более широкий, который более математичен.
Я хочу получить 4 очка, которые в последовательности сделают форму, которую я ищу.
С кодом, который я написал, я часто получаю желаемую форму; однако, я все еще получаю самопересекающиеся формы. На данный момент я не слишком суетился о том, что формы выпуклые.
Причина, по которой мне нужны такие формы, потому что кажется, что они единственные, что нравится в box2d.
Любые 4 очка могут сделать несамопересекающиеся четырехугольники вправо? Должен ли я генерировать 4 изначально и сортировать их в последовательности, которая работает? Какой лучший/самый эффективный способ для этого?
- Оригинальный Вопрос Название: Случайные Четырехугольник поколение