2011-07-12 12 views

Respuesta

5

Apuesto a que podría escribir un algoritmo que básicamente tomaría x número de giros aleatorios antes de ir directamente a las coordenadas de salida. Esto también supone que el algoritmo es lo suficientemente inteligente como para verificar el ángulo del giro. (suponiendo que no desee terminar en nudo web)

Sin embargo, suponiendo que esta no sea su tarea de graduación o que se le pague por hora para trabajar en esto, esto sería una pérdida de tiempo el tiempo y el éxito son muy dudosos.

Incluso si logra generar un algoritmo de una sola línea, hacerlo de modo que las líneas no se acerquen demasiado es casi imposible. Usted va a terminar con algo como esto: knot-web

3

se parece a:

x = 0; y = 0; angel = 0; 
while (true) { 
    angel = angel + 0.5 - random(1); 
    x1 = x + 0.1 * cos(angel); 
    y1 = y + 0.1 * sin(angel); 
    if (abs(x1 - x) + abs(y1 - y) < 10) 
    drawline(x,y,x1,y1); 
    x = x1; y = y1; 

    if (x < 0) x = width; 
    if (y < 0) y = height; 
    if (x > width) x = 0; 
    if (y > height) y = 0; 
} 

enter image description here

4

Esto está lejos de una respuesta completa, pero en el ojo de mi mente parece que podría ayudarle a:

En lugar de dibujar curvas desde el inicio hasta el punto final de toda la línea, considere subdividir su placa en una cuadrícula uniformemente espaciada. Cada cuadrado de una columna de la cuadrícula tiene derecho a tener un punto de una curva en ella, y usted avanzará constantemente de izquierda a derecha (¿al principio? Por simplicidad).

La aleatoriedad entraría en juego al elegir un cuadrado para una curva: para evitar que se vuelva demasiado caótico, podrías dar a este límite de aleatoriedad, por ejemplo, "no puedes elegir un cuadrado que (si es una distancia) de cuadrado a cuadrado se considera 1) viola abs(current vertical position - new vertical position) <= 5 a menos que ya no exista ninguno como este "o algún otro tipo de restricción arbitraria. ("A menos que ninguno tal es libre de ningún modo en este punto" es importante, de lo contrario es posible encerrarse en un estado insoluble.)

Two example curves generated this way.

(Lo sentimos, dibujar curvas con mi ratón -> peor/sin interpolación nunca. interpolación Catmull-Rom será probablemente su amigo aquí, sin embargo, me imagino.)

La pantalla debe ser lo suficientemente floja dado que sus puntos de curva no pueden arbitrariamente de dispersión en conjunto dado una parrilla, pero es probable que sea muy difícil Haz que la curva se conecte al punto final de forma "fluida": podría ser una buena solución si no te importa el extremo arbitrario ts, sin embargo, leído como, el algoritmo puede decidir por sí mismo dónde quiere que termine la línea.

¿Crees que esta idea podría ayudarte con tus curvas?

+0

Gracias, muy buena idea con cuadrados, pero hay mucho que ver con suavizar etc. De todos modos, ¡gracias por tu tiempo! – Kirzilla

+0

@Kirzilla: Con mucho gusto.¿Puede decirme qué quiere decir con 'pero hay mucho que ver con suavizar, etc.', tal vez pueda ayudarlo? – pinkgothic

Cuestiones relacionadas