6 votos

Fórmula para el ajuste de altura de fuente

INTRODUCCIÓN E INFORMACIÓN RELEVANTE:

Soy un desarrollador de software que necesita para implementar la impresión en mi aplicación. En mi aplicación el usuario puede elegir diferentes tamaños de papel ( A3, A4, A5 ...) que requiere de mi aplicación a escala de dibujo en consecuencia.

He logrado resolver la mayoría de las tareas, excepto el ajuste de la altura de fuente. Este es el lugar donde me quedé atrapado.

He pedido ayuda en StackOveflow pero no obtuvo respuesta satisfactoria. Ya todo lo que necesita es la fórmula para la escala de altura de fuente, me he decidido a pedir ayuda aquí.

Dado que este es matemático sitio, yo le expresé mi pregunta de una manera que no requiere ningún conocimiento de programación ( todo lo que pido es leer atentamente la cuestión, ya que esto va a ser difícil para mí ). Si tengo que aclarar algo o agregar más información por favor deje un comentario y voy a actualizar mi post.

PROBLEMA:

Tengo las coordenadas del rectángulo en el que el texto debe ser dibujada.

Por desgracia, debo escoger al azar el valor de la fuente antes de dibujar el texto en el interior ( no hay manera alrededor de ella ), en lugar de calcular el tamaño de la fuente. Todo lo que puedo hacer ahora es calcular el rectángulo de este texto ( con esta fuente de altura ), caben en.

La siguiente imagen muestra lo que quiero decir:

enter image description here

  1. Me han altura de la fuente del texto en la propuesta de rectángulo;
  2. He (x,y) coordenadas de los dos rectángulos ( ya que mi inglés no es capaz de describir con precisión lo que quiero decir por favor vea la imagen de abajo ):

enter image description here

NOTA IMPORTANTE:

En mi marco de programación, el eje-y es a la inversa -> positivo los valores están por debajo del eje x y las negativas anteriores. Por favor ver en la siguiente imagen:

enter image description here

PREGUNTA:

Me puedes dar la fórmula para la correcta cambio actual altura de fuente para que el texto quepa en destino rectángulo?

EDITAR:

Me han tratado de aplicar la fórmula recomendada por los estados Nikos M. y obtuvo resultados muy decentes. El problema anterior ¿por qué su fórmula no funcionó fue la relativa a la forma en que mi lenguaje de programación se realiza la conversión entre enteros y números reales. Después de corregir esto, la salida es casi perfecta ( la última carta que apenas supera el límite ). Voy a seguir intentando con este enfoque, ya que se ve muy prometedor, pero daría la bienvenida a otras soluciones, si las hay.

FINAL DE LA EDICIÓN

EDICIÓN #2:

He modificado la fórmula de los estados MvG's respuesta a esta:

$$\text{óptimo tamaño de la fuente}=\text{adivinar el tamaño de la fuente}\times\sqrt{\frac {\text{ancho deseado}}{\text{calcula el ancho}}}$$

Sólo hubo un caso donde el texto supera el límite, en todos los demás casos, el comportamiento fue perfecto.

FINAL DE LA EDICIÓN #2

De nuevo, este es mi primero post así que si la edición es necesaria/la adición de una adecuada etiquetas/cualquier cosa me dejan un comentario y voy a actuar en consecuencia, tan pronto como sea posible. Gracias por su paciencia y comprensión.

COMENTARIOS FINALES:

He probado de todo, pero la aceptó solución no siempre en uno o dos casos. No importa cuánto contestadora intentado, cada vez que la falla ocurra. Yo creo que el problema no radica en matemática parte, sino que es relativa a un defecto de la API que yo uso. He consultado ingenieros experimentados y ellos estuvieron de acuerdo. Por lo tanto, he aceptado oficialmente la respuesta, ya que desde el punto de vista matemático resuelve el problema. Esta sección está escrita para advertir programers a ser equivocada de que en realidad la fórmula se resuelve la programación parte del problema también. Gracias a todos por intentar ayudar y por su apoyo. Saludos hasta la próxima vez.

3voto

gagneet Puntos 4565

En General, la idea

Suponiendo que el tamaño de la fuente es proporcional a la altura del rectángulo, usted tiene

$$\frac{\text{adivinar el tamaño de la fuente}}{\text{calcula la altura}}= \frac{\text{óptimo tamaño de la fuente}}{\text{altura}}$$

So you could compute the optimal font size from this as

$$\text{óptimo tamaño de la fuente}=\text{altura}\times \frac{\text{adivinar el tamaño de la fuente}}{\text{calcula la altura}}$$

But there are a lot of fine points to this. If you have pre-wrapped text, you'd likely want to do this for both dimensions independently, then choose the minimum of the font sizes computed in this way to make sure the text fits inside the box in both directions. If your algorithm (re)wraps the text, then the font size will not neccessarily be proportional to the height of the rectangle. Instead, the squared font size will be roughly proportional to the area of the rectangle, so if you compute the rectangle height for fixed width, the resulting height is proportional to the area and you should use this:

$$\frac{(\text{adivinar el tamaño de la fuente})^2} {\text{ancho fijo}\times\text{calcula la altura}}= \frac{(\text{óptimo tamaño de la fuente})^2} {\text{ancho fijo}\times\text{altura}} \\ \text{óptimo tamaño de la fuente}=\text{adivinar el tamaño de la fuente}\times\sqrt{\frac {\text{altura}}{\text{calcula la altura}}}$$

Feo detalles

Los detalles de la línea de rotura de hacer de esto una estimación aproximada, aunque. Otros detalles, como la fuente de sugerencias o entero-sólo los tamaños o las métricas, también podría hacer el cálculo impreciso. Por lo tanto, puedes repetir esta operación varias veces hasta que esté satisfecho con el ajuste.

También podría considerar otros enfoques iterativos, como por ejemplo la interseccion, que tardará más en el buen comportamiento de los casos, pero va a ser bastante robusto cuando se trata de casos de esquina. Para hacer interseccion, calcular un objetivo de tamaño de fuente como de arriba, a continuación, haga doble que repetidamente hasta obtener un tamaño de fuente que supera la caja, y también reducir a la mitad varias veces hasta obtener un tamaño que encaja bien dentro de la caja. A continuación, puede de forma iterativa, elija un tamaño de fuente entre estas dos corrientes extemes, y dependiendo de si el cuadro calculada para que el tamaño se ajusta o no, ajustar cualquiera de límite hasta los límites están lo suficientemente cerca el uno al otro que usted puede considerar como una solución.

Una observación respecto a tu pregunta: los detalles acerca de la orientación de los ejes, o de las coordenadas de las cuatro esquinas del rectángulo, es bastante irrelevante desde un punto de vista matemático. El núcleo del problema es el tamaño de la fuente vs rectángulo de dimensiones, el resto es sólo los detalles de la implementación.

Cuando anchos no coinciden

La referencia proporcionada indica que si el DT_WORDBREAK bandera, la salida se ajusta a la anchura deseada (es decir, ser que ancho o más pequeño) a menos que exista una sola palabra que excede a la anchura. Así que si usted nota que la calculada anchura excede el ancho deseado, se puede concluir que como una sola palabra es demasiado largo, y ajustar el tamaño de letra basado en la palabra:

$$\text{óptimo tamaño de la fuente}=\text{ancho deseado}\times \frac{\text{previamente elegido el tamaño de la fuente}}{\text{calcula el ancho}}$$

Que debe hacer la sola palabra ajuste, a menos de redondeo o kerning o sugerencias o lo que es morder.

Si la calculada ancho es menor, entonces el algoritmo al parecer, decidió ajustar el texto en más lugares de los que el cálculo anterior habría asumido. Que sólo es razonable, ya que los anteriores, básicamente, supone que se puede ajustar una línea en cualquier lugar, e incluso obtener rebanadas de que tienen menos de la altura de una línea. De todos modos, si el ancho es demasiado pequeño, pero a la altura de los partidos, usted puede simplemente utilizar de relleno en el centro horizontal. Si la altura es demasiado alto, se puede utilizar la fórmula en la parte superior, para ajustar la altura. Sin uno, el de la raíz cuadrada. Pero si usted hace esto, usted elija un tamaño de fuente más pequeño, y de repente la aplicación podría romper el texto en menos lugares, por lo que el elegido el tamaño de la fuente puede ser pequeña de nuevo.

Así que usted acepte este hecho que podría ser la elección de una fuente pequeña en ese momento, o bisecas, como se describe anteriormente.

0voto

dahma Puntos 46

Me siento casi como una mala persona por lo que sugiere que esta, y no es en realidad ni siquiera un "mathy" la respuesta, pero siempre se puede tratar de derivar el tamaño de la fuente cada vez que, de forma experimental.

Puede ser inteligentes acerca de esto también. Recoger algunas de tamaño de fuente, y hacer que su texto. Demasiado grande? Cortar por la mitad y vuelve a intentarlo. Demasiado pequeño? El doble y pruebe de nuevo. Cada vez, reducir la ventana de variación. Es decir, hacer una búsqueda binaria para encontrar el óptimo tamaño de texto.

Dado que los tamaños de fuente generalmente varían en números enteros (he visto implementaciones de apoyo de la mitad de los números enteros, y tal vez alguien, en algún lugar admite más), el algoritmo rápidamente convergen a la respuesta correcta. Si estás lidiando con los cambios incrementales en el texto, a continuación, la solución se puede ajustar rápidamente.

Si te sientes especialmente de lujo, supongo que se podría utilizar cualquier raíz buscador lugar para encontrar la solución óptima de una manera similar.

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