View Full Version : [C] Curve di Bèzier e B-Spline
DrZoidberg
25-05-2007, 18:49
Salve...sto facendo un programma in C che disegna una curva di Bèzier e una curva B-Spline! Ho i punti x i quali devono passare queste curve...mi manca solo disegnarle ma nn ho la minima idea di come posso fare!!!
Come funzionano le OpenGL ?? Sono completamente ignorante a riguardo...spero che qualcuno possa aiutarmi!!!
Grazieee
premesso che sono completamente ignorante circa il lato matematico delle curve che hai nominato.
se non sei costretto ad usare OpenGL e se sei su Windows puoi provare alcune API della GDI:
http://msdn2.microsoft.com/en-us/library/ms534244.aspx
http://msdn2.microsoft.com/en-us/library/ms534265.aspx
Salve...sto facendo un programma in C che disegna una curva di Bèzier e una curva B-Spline! Ho i punti x i quali devono passare queste curve...mi manca solo disegnarle ma nn ho la minima idea di come posso fare!!!
Come funzionano le OpenGL ?? Sono completamente ignorante a riguardo...spero che qualcuno possa aiutarmi!!!
Grazieee
sono interessato al tuo code.
E' uno degli ultimi argomenti che dovrò affrontare tra un pò, sto ultimando l'editor del motore grafico, devo implementare algoritmi per la navmesh... e il tuo code potrebbe essermi utile. Ho terminato l'AI per il personaggio e i nemici tramite spline in 3ds max con algoritmo pathfinder *A.
Quindi sarei interessato alle curve e curioso alle b-spline facendo fare delle curve, ai "nemici" + realistiche tra un waypoint e l'altro.
Se vuoi posso integrarlo, in un attimo in directx, in quanto non uso opengl.
ti interessa?
tomminno
27-05-2007, 11:19
Mi inserisco nel thread per fare una domanda sulle B-Spline:
avrei bisogno di usarle per interpolare dei dati, però dovrei generare delle B-Spline del 13° ordine a partire dai dati di partenza (mi sono perso per strada nei conti già al 5° ordine nel tentativo di tirare fuori la formula).
Che codice usate per creare le B-Spline?
DrZoidberg
29-05-2007, 10:15
premesso che sono completamente ignorante circa il lato matematico delle curve che hai nominato.
se non sei costretto ad usare OpenGL e se sei su Windows puoi provare alcune API della GDI:
http://msdn2.microsoft.com/en-us/library/ms534244.aspx
http://msdn2.microsoft.com/en-us/library/ms534265.aspx
Scusa ma sono davvero ignorante in tema! Come faccio ad utilizzare queste API ?
Mi inserisco nel thread per fare una domanda sulle B-Spline:
avrei bisogno di usarle per interpolare dei dati, però dovrei generare delle B-Spline del 13° ordine a partire dai dati di partenza (mi sono perso per strada nei conti già al 5° ordine nel tentativo di tirare fuori la formula).
Che codice usate per creare le B-Spline?
Ciao, spero vi possa aiutare... B-spline che ho implementato per un corso all'univ... E' in matlab. Ciao
function [p] = bezier(Data,n_punti)
% BEZIER
%
% Plot a Bezier curve and gives the x-y coordinates as output
% Version Beta 1.0, March 2 2006
%
% [A] = BEZIER(ControlPoints,CurvePoints)
% [mx2] [nx2] [m]
% by:
% Dipartimento di Ingegneria Meccanica
% Universita' degli Studi di Trieste
% Mattia Ciprian, Valentino Pediroda
% check input data
[PuntiControllo,dimension] = size(Data);
if dimension~=2,
error('(BEZIER) Wrong Data Format. It has to be [n x 2]')
end
% inizializzazione
p = [];
t=0;
step = 1/(n_punti-1);
grado = PuntiControllo-1; % grado_curva + 1 <---> n punti di controllo
for t=0:step:1,
p(end+1,:)=zeros(1,2);
for j=1:PuntiControllo,
p(end,1)=p(end,1)+Data(j,1)*(t^(j-1))*((1-t)^(grado+1-j))*nchoosek(grado,j-1);
p(end,2)=p(end,2)+Data(j,2)*(t^(j-1))*((1-t)^(grado+1-j))*nchoosek(grado,j-1);
end
end
Dimenticavo, a chi interessasse qui c'è la teoria:
http://www.univ.trieste.it/~dipenerg/pediroda/IntroduzioneParametrizzazione.pdf
tomminno
29-05-2007, 19:33
Ciao, spero vi possa aiutare... B-spline che ho implementato per un corso all'univ... E' in matlab. Ciao
function [p] = bezier(Data,n_punti)
% BEZIER
%
% Plot a Bezier curve and gives the x-y coordinates as output
% Version Beta 1.0, March 2 2006
%
% [A] = BEZIER(ControlPoints,CurvePoints)
% [mx2] [nx2] [m]
% by:
% Dipartimento di Ingegneria Meccanica
% Universita' degli Studi di Trieste
% Mattia Ciprian, Valentino Pediroda
% check input data
[PuntiControllo,dimension] = size(Data);
if dimension~=2,
error('(BEZIER) Wrong Data Format. It has to be [n x 2]')
end
% inizializzazione
p = [];
t=0;
step = 1/(n_punti-1);
grado = PuntiControllo-1; % grado_curva + 1 <---> n punti di controllo
for t=0:step:1,
p(end+1,:)=zeros(1,2);
for j=1:PuntiControllo,
p(end,1)=p(end,1)+Data(j,1)*(t^(j-1))*((1-t)^(grado+1-j))*nchoosek(grado,j-1);
p(end,2)=p(end,2)+Data(j,2)*(t^(j-1))*((1-t)^(grado+1-j))*nchoosek(grado,j-1);
end
end
Però a me servono le BSpline (al momento mi accontenterei delle C1) perchè deve passare per tutti i punti di partenza.
A suo tempo andai a riprendere gli appunti di analisi numerica, ma tirare fuori la formula per il 13° ordine è follia, oltretutto senza usare tool di calcolo esterni
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.