Pregunta

Mi tarea es desarrollar un algoritmo que se ajuste a diferentes tipos de curvas en una secuencia de puntos dada en un espacio bidimensional.

Para poder probar mi algoritmo, he elegido SVG para mostrar el resultado. Tengo varios problemas con eso.

Como puede haber entradas y salidas muy diferentes de mi algoritmo, ¡es esencial que pueda ver los archivos SVG generados con la capacidad de hacer zoom!

Pero una ruta en SVG solo se puede mostrar con un cierto ancho. Si me acerco, el ancho de la ruta se hace más ancho. Me gustaría que el ancho sea, por ejemplo, 1 píxel en todos los niveles de zoom. ¿Hay alguna solución para esto?

También: ¿puede SVG mostrar puntos? Sí, puntos simples y crudos. He descubierto que no puede.

Gracias

¿Fue útil?

Solución

Muchos otros formatos de vectores (como PostScript y PDF) le permitirán usar un ancho de trazo de 0 para un & "; rayita &"; carrera. No es así con SVG. Sin embargo, creo que creo puede lograr lo que desea si usa un porcentaje de ancho de trazo. Consulte las especificaciones de w3c SVG para obtener detalles , pero, básicamente, debería capaz de hacer algo como esto:

stroke-width:"1%"

Esto debería trazar su curva con un ancho de línea que sea un 1% constante del rectángulo delimitador, independientemente del nivel de zoom.

En cuanto a los puntos, SVG no los admite. Cuando hice esto en el pasado (usando PostScript), siempre usé un arco con un pequeño redius para dibujar un círculo pequeño (que puede rellenar para hacer un punto, si lo desea).


@Zoli: Después de tu comentario, estaba a punto de sugerirte que busques en PostScript para que puedas usar el ancho del trazo de la línea del cabello cuando me encontré con el efecto vectorial sin trazo de escala en la especificación SVG :

vector-effect="non-scaling-stroke"

Simplemente agregue esto a su curva y debería ser invariable para la escala, de acuerdo con la especificación. Su ejemplo usa line, pero también debería funcionar en sus curvas.

Otros consejos

No hay < punto > elemento o algo así en SVG actualmente, pero agregar que se ha discutido en el SVG WG, por lo que puede incluirse en el futuro. Siéntase libre de expresar sus necesidades y requisitos para un & Lt; point & Gt; elemento a la lista de correo de svg público: www-svg@w3.org.

Una solución alternativa es usar, por ejemplo, < line > elementos y dejar que sean de longitud cero, si lo desea, puede tener lineas redondeadas para que muestre un punto. Todo depende de para qué lo necesites. Un círculo con r = 0 podría ser mejor.

La propiedad 'efecto de vector' con el valor 'trazo sin escala' es lo que debe usar para decir que el trazo no debe escalar. No es tan difícil implementar una solución de JavaScript que garantice que los trazos se escalen correctamente si el 'efecto vectorial' no es compatible de forma nativa. Opera 9.5+ lo admite de forma nativa.

Gracias Naaff por la ayuda. Creo que me quedaré con Firefox, y especificaré para cada ejecución de algoritmo el ancho de línea en el archivo svg generado. Eso será adecuado para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top