Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss
Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

3d circle calculation

3 views
Skip to first unread message

Andrey Panow

unread,
Mar 25, 2011, 7:14:52 AM3/25/11
to
Hello All

���������� �����H���� � 3D ������� ���p�����

http://avs.chat.ru/sphere3d.htm
http://avs.chat.ru/sphere3d.avs [AVS WinAMP]

����: ����p����� ������ 3D ����� ��� �p������� ����p�.
������: ���������� ��p�������, ����p�� ��p������� ��p��������� �p����������
��������� �� ���p��.

������� �� ��������� �����p� ����� �p������ P(xp,yp,zp) ����������� p�����
���p��� ���p� rs � ��p����p ������� ��������� pc ��� ��������� �����p� ��p����
N(xn,yn,zn). "H���p���̣������" ����� ����������, ���� �����p ��p���� �����
������� �������� (rn=0), ������� ���� �� ���� �� ������������ �����p� ��p����
������ ������ ���������� �� p����� ����. ����� ����������� p����� �������
��p������� rc � ���p������ ţ ����p� R(xr,yr,zr). ��� ������� �������� �������
���p����� (fi=0) �������� �����p�� F(xf-xr,yf-yr,zf-zr). ����� ���ޣ�� ������
�������� (fi=fp) �������� �� ��p������� (�p�����p��) �����p��
P(xp-xr,yp-yr,zp-zr). �����p��� �p���������� ���� p�����-�����p�� P � F
��������� �������� ������ ���� ������ �������� |fp| ��p�� �p��������. ���������
�p���������� �p�� �����p�� F, N � P ���� ����������� ��������� ��p������� fp.
�����p��� �p���������� �����p�� F � N ���� ���p������� ��� �p����� - �����p
G(xg,yg,zg). �����p��� �p���������� �����p�� P � G ��p������� �p������
p���ޣ����� �����p� P �� ��� �p�����, �, ��������������, ���� fp. � �p������
���������� ����� �p��������� ������� �� ����, ����� ���� p���� p����� �������
��p������� (rc=0). �p��������� ��� ��������, ��� ����� ������� ���������
�����p��������� �� ��� �p������, � ������� �� ��p��������� � �p���p������.
����� ����� ���������� ��������� �� ��p��ޣ�� �p������. �p� ���������� �p������
����p������ 3D �������, �p�����p�� ����������� �������� ��� ��� ������ �������
�����. ��� ��������� �p������ ���p�������� ������ �����p�� ��p����. ����p���
������������ ��pp������ ��p��ޣ� ����� �p������ (������������ �p������,
�p������� � �������) � ��������� �������� "��p��p���� �����", ������������ �p�
������������� ����p���� ����� � ������������ 3D ���p��� �p������. ��� �����
���������� ������������� � ������������� �����p������ �p� ����p����� 3D �����
�p������� �������� � �p������ ����p� �p����p���� �������.

���p� (0,0,0)
x^2 + y^2 + z^2 = rs^2
��p�������� ������� ��������� �� ����� �� ��������� � �����p� ��p����
xn*(x-xp) + yn*(y-zp) + zn*(z-zp) = 0
����� (������) �p������� ���������
xn*x + yn*y + zn*z + ( - xn*xp - yn*zp - zn*zp) = 0
H�p��p������� �p������� ������� ���������
x*cos(oxn) + y*cos(oyn) + z*cos(ozn) - pc = 0
H��p�������� ��������
nx = cos(oxn); ny = cos(oyn); nz = cos(ozn);
��������� ��p������� �����p ������� ���������
nx^2 + ny^2 + nz^2 = 1
����� ��p��������� �� ������� ��p�������
rs^2 = rc^2 + pc^2

�����p��� �p���������� �����p�� P(xp-xr,yp-yr,zp-zr) � F(xf-xr,yf-yr,zf-zr)
rc^2 * cos(fc) = (xp-xr)*(xf-xr) + (yp-yr)*(yf-yr) + (zp-zr)*(zf-zr)
��������� �p���������� �p�� �����p��
�����p��� �p���������� F(xf-xr,yf-yr,zf-zr) � N(xn,yn,zn)
xg=(yf-yr)*zn-(zf-zr)*yn; yg=(zf-zr)*xn-(xf-xr)*zn; zg=(xf-xr)*yn-(yf-yr)*xn;
rg=sqrt(xg*xg+yg*yg+zg*zg);
�����p��� �p���������� P(xp-xr,yp-yr,zp-zr) � G(xg,yg,zg)
rc*rg*cos(delta) = (xp-xr)*xg + (yp-yr)*yg + (zp-zr)*zg
delta = acos( (xp*xg+yp*yg+zp*zg)/rc/rg ) - pi/2 ;
delta = -asin( (xp*xg+yp*yg+zp*zg)/rc/rg ) ;
fp = fc * sign(delta) ;

�p������ ����� ���p�� ��� �����p� ��p���� ON
fi=i*2*pi; x1=r*cos(fi); y1=r*sin(fi); z1=0;
���p��� �p������ ���p�� ��� OY
x2=x1*cos(tetta)-z1*sin(tetta);
z2=x1*sin(tetta)+z1*cos(tetta);
y2=y1;
���p��� �p������ ���p�� ��� OZ
x3=xr+x2*cos(omega)-y2*sin(omega);
y3=yr+x2*sin(omega)+y2*cos(omega);
z3=zr+z2;

*

// ���p� �p������ ��p�� ����� (xp,yp,zp) //
rs = sqrt(xp*xp+yp*yp+zp*zp);
// H�p��p����� ��������� //
mu = 1/sqrt(xn*xn+yn*yn+zn*zn);
// ��������� ��p������� �����p ������� ��������� // rn=1 (!)
nx = xn*mu; ny = yn*mu; nz = zn*mu; // rn = nx*nx + ny*ny + nz*nz;
// ���������� �� ������� ��������� //
pc = xp*nx + yp*ny + zp*nz;
// ����p ������� ��p������� //
xr = pc*nx; yr = pc*ny; zr = pc*nz;
// ������ ������� ��p������� //
rc = sqrt(rs*rs - pc*pc);
// ���� �����p� ��p���� �� ��� OZ (ozn) //
tetta = - acos(nz);
// ���� �p������ ��p���� �� ��� OX //
omega = atan2(ny,nx);

// ���������� ��� ���p����� fi=0 //
xf=xr+rc*cos(omega)*cos(tetta);
yf=yr+rc*sin(omega)*cos(tetta);
zf=zr+rc*sin(tetta);
// �����p��� �p���������� // rc|=0 (!)
fc = acos( ((xp-xr)*(xf-xr) + (yp-yr)*(yf-yr) + (zp-zr)*(zf-zr))/rc/rc );
// ��������� �p���������� //
xg=(yf-yr)*zn-(zf-zr)*yn; yg=(zf-zr)*xn-(xf-xr)*zn; zg=(xf-xr)*yn-(yf-yr)*xn;
fp = fc * sign( -(xp*xg+yp*yg+zp*zg) ) ;
fp = if( below(rc,0.001),0,fp);

fi=fp+i*2*pi;

// ���������� ����p��� //
x=xr+rc*(cos(fi)*cos(omega)*cos(tetta)-sin(fi)*sin(omega));
y=yr+rc*(cos(fi)*sin(omega)*cos(tetta)+sin(fi)*cos(omega));
z=zr+rc*(cos(fi)*sin(tetta));

*

http://avs.chat.ru

Bye

0 new messages