Advertisement
Guest User

Untitled

a guest
Jul 2nd, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
BibTeX 3.27 KB | None | 0 0
  1. struct reper {
  2.    triple o,i,j,k;
  3.    guide3 oi,oj,ok;
  4.    string olabel,ilabel,jlabel,klabel,labelsize;
  5.    
  6.    transform3 trans;
  7.    
  8.    void update_axis() {
  9.        this.oi = this.o -- this.o+this.i;
  10.        this.oj = this.o -- this.o+this.j;
  11.        this.ok = this.o -- this.o+this.k;
  12.    }
  13.    
  14.    void operator init(triple o=(0,0,0),triple i=(1,0,0),triple k=(0,-1,0),
  15.                       triple j=(0,0,1),string ilabel="\vec{i}",
  16.                       string jlabel="\vec{j}",string klabel="\vec{k}",
  17.                       string olabel="o",string labelsize="\footnotesize"){
  18.        this.o = o; this.i = i; this.j = j; this.k = k;
  19.        this.update_axis();
  20.        this.olabel = olabel; this.ilabel = ilabel;
  21.        this.jlabel = jlabel; this.klabel = klabel;
  22.        this.labelsize = labelsize;
  23.        
  24.        trans = identity4;
  25.    }
  26.    
  27.    void shift(triple dxyz) {
  28.        this.o += dxyz;
  29.        trans *= three.shift(dxyz);
  30.        this.update_axis();
  31.    }
  32.    
  33.    void rotate(real alpha,triple u) {
  34.        this.i = three.rotate(alpha,u)*this.i;
  35.        this.j = three.rotate(alpha,u)*this.j;
  36.        this.k = three.rotate(alpha,u)*this.k;
  37.        trans *= three.rotate(alpha,u);
  38.        this.update_axis();
  39.    }
  40.  
  41.    void draw(triple view_point) {
  42.        draw(this.oi,red,Arrow3);
  43.        draw(this.oj,red,Arrow3);
  44.        draw(this.ok,red,Arrow3);    
  45.        
  46.        real dij = dot(view_point-this.o,cross(this.i,this.j));
  47.        triple shift_o = unit(this.i+this.j);
  48.        if (dij<0) { shift_o = - shift_o; }
  49.        label(this.labelsize+" $"+this.olabel+"$",this.o,shift_o,blue);
  50.  
  51.        triple shift_i = cross(this.i,view_point-this.o);
  52.        shift_i = unit(shift_i);
  53.        label(this.labelsize+" $"+this.ilabel+"$",this.o+this.i/2,shift_i,blue);
  54.            
  55.        triple shift_j = cross(this.j,view_point-this.o);
  56.        shift_j = unit(shift_j);
  57.        label(this.labelsize+" $"+this.jlabel+"$",this.o+this.j/2,shift_j,blue);
  58.  
  59.        triple shift_k = cross(this.k,view_point-this.o);
  60.        shift_k = unit(shift_k);
  61.        label(this.labelsize+" $"+this.klabel+"$",this.o+this.k/2,shift_k,blue);
  62.    
  63.    }
  64.    
  65.    triple fromModel(triple pt) {
  66.         real[] pp = {pt.x, pt.y, pt.z, 1};
  67.         pp = this.trans*pp;
  68.         return (pp[0], pp[1], pp[2]);
  69.    }
  70.    
  71.    triple toModel(triple pt) {
  72.         real[] pp = {pt.x, pt.y, pt.z, 1};
  73.         pp = inverse(this.trans)*pp;
  74.         return (pp[0], pp[1], pp[2]);
  75.    }
  76. }//Koniec definicji klasy reper
  77.  
  78.  
  79. settings.outformat="pdf";
  80. settings . prc= false ;
  81. defaultfilename = "reper-2" ;
  82. size3 ( 16cm , 16cm , keepAspect=true) ;
  83. size ( 16cm , 16cm , keepAspect=true) ;
  84. texpreamble("\def\vec#1{\overrightarrow{#1}}");
  85.  
  86. reper r = reper ( labelsize="\tiny" ) ;
  87.  
  88. write ( 'o=' , r.o ) ; write ( 'i=' , r.i ) ;
  89. write ( 'j=' , r.j ) ; write ( 'k=' , r.k ) ;
  90. triple view_point = (30 , -30 ,30);
  91. currentprojection = perspective ( view_point ) ;
  92. r.draw ( view_point ) ;
  93.  
  94. r.shift ((2 ,0 ,0));
  95. r.draw ( view_point ) ;
  96.  
  97. r.shift ((0 ,2 ,0));
  98. r.rotate (60 , r.k ) ;
  99. r.draw ( view_point ) ;
  100.  
  101.  
  102. triple p1 = (1,0,0);
  103. dot (p1, blue);
  104. triple p2 = r.fromModel(p1);
  105. dot (p2, blue);
  106. triple p3 = r.toModel(p2);
  107.  
  108.  
  109. write('p1=', p1);
  110. write('p2=', p2);
  111. write('p3=', p3);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement