5 votos

¿Cómo puedo pack $45-45-90$ triángulos dentro de una forma arbitraria?

Si tengo una forma arbitraria, me gustaría llenar sólo con $45-45-90$ los triángulos.

El objetivo es conseguir un Tangram de look, así que es relativa a esta cuestión.

Comenzando con $45-45-90$ triángulos sería un comienzo increíble. Después de la forma si se llena me imagino que podría elegir triángulos adyacentes, ya sea $2$ o $4$ y dibujar cuadrados y paralelogramos en su lugar, pero sólo llegar el esquema estimado con pic $45-45-90$ triángulos sería genial.

¿Cómo puedo empezar ?

EDITAR @J. M. comentario de hace perfecto sentido, lo que significa que primero debe asegurarse de que mi forma es apropiada para ello. He aquí un dibujo que hice para ilustrar esto:

hand

El negro de la forma es la "forma arbitraria", el azul camino es el camino que debe ser llenado.

Hasta ahora, veo que el primer paso es "estimar" arbitraria trazados con líneas a la derecha o en ángulos de 45 grados. El segundo paso sería la pregunta inicial, embalaje 45-45-90 triángulos en la forma.

Sugerencias para la estimación de azar ángulos de las líneas con 45/90 grados de ángulo de las líneas o 45-45-90 triángulo de embalaje ?

UPDATE2

He ido por delante con un enfoque ingenuo para calcular una ruta arbitraria(esquema) usando sólo el recto o en diagonal(45 grados) líneas.

function estimate45(points:Vector.<Point>):Vector.<Point> {
    var result:Vector.<Point> = new Vector.<Point>();
    var pNum:int = points.length,angle:Number,pi:Number = 3.141592653589793,qpi:Number = pi*.25,d:Number = 0;
    for(var i:int = 0 ; i < pNum ; i++){
        if(i == 0) angle = Math.atan2(points[i].y,points[i].x);
        else {
            angle = Math.atan2(points[i].y-points[i-1].y,points[i].x-points[i-1].x);
            d = Math.sqrt((points[i].x-points[i-1].x)*(points[i].x-points[i-1].x)+(points[i].y-points[i-1].y)*(points[i].y-points[i-1].y))
        }
        //constraint to 45 (1. scale to values between 0,1 (/qpi) 2. round, 3. do whatever(convert to degrees/radians as needed) 
        angle = (Math.round(angle/qpi)) * 45 / 57.2957795;
        if(i == 0) result.push(new Point(Math.cos(angle)*d,Math.s(angle)*d));
        else       result.push(new Point(result[i-1].x+Math.cos(angle)*d,result[i-1].y+Math.s(angle)*d));
    }
    return result;
}

Yo bucle a través de la ruta de acceso (una lista ordenada de puntos) y tengo que calcular el ángulo y el radio de cada línea(cartesianas a polares creo). Entonces me ronda " el ángulo de 45 grados, y dibujar una línea a 45 grados limitada versión de la original de ángulo, y mantener la misma longitud de la línea.

Esto no es de muy buena forma de hacerlo, especialmente para líneas consecutivas con similar ángulos.

He aquí algunas pruebas: crescent

El rojo atenuado es el original, el verde es el de la estimación.

hand 45

@Américo Tavares sugerencia es grande, aunque. Yo podría usar este método para gráficos de mapa de bits, no solo de gráficos vectoriales.

Si me gustaría ir con este enfoque, me imagino que me gustaría hacer algo como:

obtener un mosaico(crear una red de cajas para cubrir el tamaño de la forma).

boxes_xnum = floor(w/box_size)
boxes_ynum = floor(h/box_size)
for(y to boxes_ynum):
    for(x to boxes_xnum):
        grid.addBitmap(copyPixels(source,x*box_size,y*box_size,box_size,box_size));//copypixels(source,x,y,width,height)

for box in grid:
   if(box.nonAlphaPixels/box.totalPixels > .75): fullBox
   else:
        checkDiagonalType()//is it like this / or like this \
        checkFillSide()//which of the two sides should be filled
        //which means I should check for something constrained to 45 degrees angles \| or _\ or |/ or /_
        //in the case of halfs go for random diagonal ? 

Si pienso sobre esto mejor,
cuando me bucle a pesar de los píxeles de una caja, mantener un número de píxeles por cuadro 'cuadrante" (parte superior izquierda). Si no los píxeles transparentes en un cuadrante en más de .5 o .75 es marcado como usado. Se basa en cuántos y cuáles de los 4 cuadrantes se utilizan en una caja, una diagonal con la dirección se utiliza.

solve

¿Tienen sentido, o me estoy complicando más de esto ?

4voto

Dan Walker Puntos 3466

Muestro aquí mi interpretación de la pregunta y los comentarios hasta ahora:

alt text

Uno tiene que definir el triángulo de lados de longitudes (por supuesto es suficiente), dependiendo de la resolución que uno necesita. En la figura I aproximación a la forma roja por el color verde a la derecha triángulos con dos ángulos iguales. El límite de la forma determina los triángulos más o cerrados, a los criterios que al menos el 50% de la zona del triángulo se encuentra dentro de la forma. El interior de los triángulos puede ser elegido libremente.

Nota: hay un par de errores en el dibujo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X