• Embed Doc
  • Readcast
  • Collections
  • CommentGo Back
Download
 
Conf. Dr. Marin Vlada, Universitatea din Bucuresti
www.ad-astra.ro/marinvlada
 
Grafica pe calculator / Geometrie computationala
 
Computer Graphics / Computation Geometry
 
Titular curs : Conf. Dr. Marin Vlada, Universitatea din BucurestiWEB:http://marinvlada.googlepages.com/,www.ad-astra.ro/marinvlada  E-mail: marinvlada[at]yahoo.com, marinvlada[at]gmail.com
Course: COMPUTER GRAPHICS | Bachelor of Science (
Computer Science
)Software: C++, OpenGL, Java 3D, Java Script, VRML, SVGhttp://marinvlada.googlepages.com/prog_grafic.htm
 
 
©www.cniv.ro www.icvl.eu 
 
Conf. Dr. Marin Vlada, Universitatea din Bucuresti
www.ad-astra.ro/marinvlada
 
PROIECT – generare litere folosind curbe B-spline
 Nota: Codul in C++
Curbe B-spline si aplicatii
Fata de curbele Bezier,
curbele B-spline
sunt descrise prin functii polinomiale (de gr. IIsi III) definite pe portiuni.
Curbele B-spline de gradul II (
 parabolice) sunt utilizate la generarea caracterelor  pentru
fonturile
True Type ( .ttf)
din sistemul Windows, iar 
curbele B-spline de gradulIII
(cubice) sunt utilizate la generarea caracterelor pentru
 fonturile
PostScript
(
.ps
).
Curbele B-spline de gradul II (parabolice)
Daca se considera o
linie poligonala
formata din 3 puncte
 P 
i
(x
i
 , y
i
 ), i=1,2, 3
, atunciaceasta se aproximeaza cu o curba B-spline ce are o extremitate in mijlocul segmentului
 P 
1
2
 ,
iar cealalta extremitate se afla in mijlocul segmentului
 P 
2
3
,
 
curba
fiind un arcde parabola (curba de gradu II) definit de
drumul 
(aplicatia) :
 γ
:
[0,1]
 
R
2
, unde
 γ
 
(t) = (x(t), y(t))
,
 x(t) = a x
1
+ b x
2
+ c x
3
  y(t) = a y
1
+ b y
2
+ c y
3
,
 pentru
∈ [0,1]
, notatiile fiind
 a = (1 – 2t + t 
2
)/2 , b = (1 + 2t -t 
2
) /2, c = t 
2
/2, a+b+c = 1 P 
2
 
 γ
 
 P 
1
3
 Evident, pentru t=0 si t=1 avem, respectiv
 γ
 
(0) = (x(0), y(0))
, x(0) = (x
1
+ x
2
)/2 , y(0) = (y
1
+y
2
)/2 si
 γ
 
(1) = (x(1), y(1))
, x(1) = (x
2
+ x
3
)/2 , y(1) = (y
2
+y
3
)/2
Definitie.
Linia poligonala
 P = P 
1
2
... P 
n
, unde
 P 
i
(x
i
 , y
i
 ), i=1,2, … ,n ,
se aproximeaza cu o
curba B-spline
 
 γ = γ
1
∪ γ
2
... γ
n-2
, avand urmatoarele proprietati ;a) are extremitatile in mijloacele segmentolor 
 P 
1
2
si
 P 
n-1
n
 
; b) segmentele
 P 
i
i+1
,
i=1,2, …, n-1
sunt tangente la curba in mijloacele segmentelor 
 P 
i
  P 
i+1
.c) curba este definita pe portiuni de
 γ
i
:
[0,1]
 
R
2
, unde
 γ
i
 
(t) = (x(t), y(t))
,
i=1,2, … ,n-2
si
 x(t) = a x
i
+ b x
i+1
+ c x
i+2
  y(t) = a y
i
+ b y
i+1
+ c y
i+2
,
 pentru
∈ [0,1]
, notatiile fiind
 a = (1 – 2t + t 
2
)/2 , b = (1 + 2t -t 
2
) /2, c = t 
2
/2, a+b+c = 1
 
Conf. Dr. Marin Vlada, Universitatea din Bucuresti
www.ad-astra.ro/marinvlada
 
In figura urmatoare se prezinta aceste proprietati.P
2
P
4
. . . . . P
n -2
P
n
 
 γ
1
 
 γ
2
 
 γ
3
 
 γ
n-2
 P
1
P
3
P
n -1
 Programul
r
ealizeaza generarea literelor mari de tip cursiv prin citirea coordonatelor unor puncte ce reprezinta o linie poligonala cu punctele aflate pe conturul literei. Unexemplu de astfel de litere este prezentat mai jos.
Program litereM.cpp
#include <graphics.h>#include <conio.h>#include <math.h>#include <iostream.h>int gd, gm;int n, i, j, k, ii, d, max, xx, yy;int x[200];int y[200];float a, b, c, p, t;int round(float nr){int aux=nr;nr=nr*10;int val=(int)nr % 10;if (val>=0&&val<5) return aux; else return aux+1;}int LUNG() // pentru pasul de discretizare; nr. de diviziuni{max = 0;for (int ii = i; ii <= i+1; ii++)
of 00

Leave a Comment

You must be to leave a comment.
Submit
Characters: ...
You must be to leave a comment.
Submit
Characters: ...