
Estoy intentando incluir etiquetas después de vectores 3D en Asíntota, que están dibujados con diferentes colores. Quiero tener todas las etiquetas en negro, pero incluso declarando el color.despuésla etiqueta no hace ninguna diferencia. Así es como se ve el resultado:
¿Cómo puedo solucionar esto? ¡Gracias!
import math;
settings.outformat="pdf";
settings.prc=true;
settings.embed=true;
settings.render=0;
size(5cm,0);
import graph3;
triple F(pair uv) {
real r = uv.x;
real t = uv.y;
return (r*cos(t),r*sin(t), r);}
surface coneup = surface(F, (0,0), (1,2pi), Spline);
draw(coneup, surfacepen=material(paleyellow, emissivepen=0.2 paleyellow), light=Viewport);
triple F2(pair uv) {
real r = uv.x;
real t = uv.y;
return (r*cos(t),r*sin(t), -r);}
surface conedown = surface(F2, (0,0), (1,2pi), Spline);
draw(conedown, surfacepen=material(paleyellow, emissivepen=0.2 paleyellow), light=Viewport);
draw(O--X, Arrow3);
draw(O--Y, Arrow3);
draw(O--Z, Arrow3);
draw(O--Y+Z, L=Label("null", position=EndPoint), yellow, Arrow3);
draw(O--.5*X+1.5*Z, L=Label("timelike", position=EndPoint), green, Arrow3);
draw(O--1.5*X+0.5*Z, L=Label("spacelike", position=EndPoint), red, Arrow3);
Editar:Intenté poner la etiqueta en un segmento minúsculo con
draw(0.99*(Y+Z) -- Y+Z, L=Label("null", position=EndPoint));
y acaba de producir una caja de etiqueta completamente negra. Entonces el problema no son los colores.
Respuesta1
Gracias por informar de este error. En el futuro, informe errores enhttps://github.com/vectorgraphics/asymptote/issues
Ahora se incluye una solución en git y se incluirá en la próxima versión 2.84.
Tenga cuidado al usar settings.render=0; Con este enfoque, solo se dispone de soporte limitado para la eliminación de superficies ocultas, la iluminación y la transparencia. Ver https://asymptote.sourceforge.io/doc/tres.html
Mientras tanto, si usteden realidadSi desea continuar usando la opción experimental settings.render=0, puede eliminar las siguientes líneas marcadas - de su copia de three.asy:
diff --git a/base/three.asy b/base/three.asy
index c208f59d..9dfad6ce 100644
--- a/base/three.asy
+++ b/base/three.asy
@@ -2907,11 +2907,6 @@ object embed(string prefix=outprefix(), string label=prefix,
if((preview || (prc && settings.render == 0)) && settings.embed) {
image=prefix;
if(settings.inlinetex) image += "_0";
- if(!preview && !S.pic2.empty2()) {
- transform T=S.pic2.scaling(S.width,S.height);
- _shipout(image,S.pic2.fit(T),newframe,nativeformat(),false,false);
- }
-
image += "."+nativeformat();
if(!settings.inlinetex) file3.push(image);
image=graphic(image,"hiresbb");
Respuesta2
Usaría el integrado unitcone
con algunas transformaciones geométricas. Sobre el color: solo usa black
el interior Label
para colorear su cuerda. Espero que el código sea simple ahora.
// http://asymptote.ualberta.ca/
size(6cm,0);
import three;
currentprojection=orthographic(3,2,1,zoom=.9,center=true);
surface conedown=shift(0,0,-1)*unitcone;
surface coneup=scale(1,1,-1)*conedown;
material p=material(paleyellow,emissivepen=0.2 paleyellow);
draw(coneup,surfacepen=p,light=Viewport);
draw(conedown,surfacepen=p,light=Viewport);
draw(O--X, Arrow3);
draw(O--Y, Arrow3);
draw(O--Z, Arrow3);
draw(Label("null",EndPoint,align=E,black),O--Y+Z,yellow,Arrow3);
draw(Label("time-like",EndPoint,black),O--.5*X+1.5*Z,green,Arrow3);
draw(Label("space-like",EndPoint,black),O--1.5*X+0.5*Z,red,Arrow3);