Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π“Ρ€Π°Ρ„ΠΈΠΊΠ° DirectX Π² DelphiΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 57

Автор ΠœΠΈΡ…Π°ΠΈΠ» ΠšΡ€Π°ΡΠ½ΠΎΠ²

end;


ПолоТСниС Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† я ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с осями ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.

ΠŸΡ€ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ курсора ΠΌΡ‹ΡˆΠΈ с Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ видовая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° пСрСсчитываСтся Π² соотвСтствии с ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ курсора:


procedure TfrmDSD.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Down := True; // Кнопка Π½Π°ΠΆΠ°Ρ‚Π°, Ρ„Π»Π°Π³ устанавливаСтся

ΠΎΠ₯ := X; // Π—Π°ΠΏΠΎΠΌΠ½ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ курсора

oY := Y;

end;


procedure TfrmD3D.FormMouseUp(Sender: TObject; Button: TMouseButton;

Shift:. TShiftState; X, Y: Integer);

begin

Down : = False; // Кнопка ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½Π°, Ρ„Π»Π°Π³ сбрасываСтся

end;


procedure TfrmDSD.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

var

eyeX, eyeZ : Single; matView : TD3DMatrix;

begin

if Down then begin // ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΌΡ‹ΡˆΠΈ

// Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Π° пСрСмСщСния курсора ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ

// Π·Π°Π΄Π°Π΅Ρ‚ пСрСмСщСния Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΠ±Π·ΠΎΡ€Π° Π² пространствС ΠΏΠΎ осям X ΠΈ Z

Angle := Angle + (X - ΠΎΠ₯) / 50.0;

// ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ курсора ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ Π·Π°Π΄Π°Π΅Ρ‚ сдвиг ΠΏΠΎ оси Y

sHeight := sHeight + (Π£ - oY) / 15.0;

eyeX := cos(Angle) * 5;

eyeZ := sin(Angle) * 5;

// УстанавливаСм Π½ΠΎΠ²ΡƒΡŽ Π²ΠΈΠ΄ΠΎΠ²ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

SetViewMatrixfmatView, D3DVector(eyeX, sHeight, eyeZ),

D3DVector(0, 0, 0), D3DVector(0, -I, 0));

FD3DDevice.SetTransform(D3DTS VIEW, matView);

// Π—Π°ΠΏΠΎΠΌΠ½ΠΈΠ»ΠΈ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ курсора

ΠΎΠ₯ := X;

oY := Y;

end;


end;


Π’ качСствС упраТнСния "ΠΎΠ±ΡƒΠΉΡ‚Π΅" Ρ‡Π΅Π»ΠΎΠ²Π΅Ρ‡ΠΊΠ° Π² башмаки, для Ρ‡Π΅Π³ΠΎ постройтС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡ ΠΊΡƒΠ±.

Π˜Ρ‚Π°ΠΊ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€ΠΎΠ² ΠΈ ΠΊΡƒΠ±ΠΈΠΊΠΎΠ² ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ занятныС построСния, Π½ΠΎ навСрняка Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊΠΈΠΌΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π°ΠΌΠΈ. Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² модСль Ρ‡Π°ΠΉΠ½ΠΈΠΊΠ° ΠΈ справСдливо ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° создана с использованиСм Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, Π° ΠΎΠΏΠΎΡ€Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Ρ‹ мною с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… срСдств. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, для ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ срСдства, ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… элСмСнтов сцСны. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ модСлирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ собствСнныС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встраиваСмых ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π’Π°ΠΊ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ распространСнный DXF-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Π° ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π»Π΅Π³ΠΊΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ², ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΡ… модСль. Π’ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π•Ρ…06 располагаСтся ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° тСкстовый Ρ„Π°ΠΉΠ», содСрТащий Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ нормалях ΠΈ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°Ρ… ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ‡Π°ΠΉΠ½ΠΈΠΊΠ°. ΠŸΡ€ΠΈ запускС прилоТСния Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π° DXF-Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ„Π°ΠΉΠ»Π°-Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Бписки, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° TList, Model ΠΈ Normals содСрТат Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ считанных Π²Π΅Ρ€ΡˆΠΈΠ½Π°Ρ… ΠΈ вычислСнных нормалях:


// Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прСдупрСТдСния компилятора

//ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

{$WARNINGS OFF}

procedure TForml.LoadDXF (const FileName : String);

var

f : TextFile;

wrkstring : String;

group, err : Integer;

xl, x2, yl, y2, zl, z2, x3, y3, z3 : Single;

// ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ список Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ procedure

AddToList (const X, Y, Z : Single);

var

pwrkVector : ^TD3DVector;

begin

New (pwrkVector);

pwrkVector^ := D3DVector (X, Y, Z) ;

Model.Add (pwrkVector);

end;


begin

AssignFile(f, FileName);

Reset(f);

// Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· DXF-Ρ„Π°ΠΉΠ»Π° Π΄ΠΎ сСкции ENTITIES

repeat

ReadLn(f, wrkString);

until (wrkString = 'ENTITIES') or eof(f);

while not eof (f) do begin

ReadLn (f, group); // НулСвая Π³Ρ€ΡƒΠΏΠΏΠ° содСрТит Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

ReadLn (f, wrkString); // Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°

case group of

0: begin

AddToList (Ρ…Π—, y3, z3) // ДобавляСм Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π² список

AddToList (Ρ…2, y2, z2)

AddToList (xl, yl, zl)

end;


10: val(wrkString, xl, err)

20: val(wrkString, yl, err)

30: val(wrkString, zl, err)

11: val(wrkString, x2, err)

21: val(wrkString, y2, err)

31: val(wrkString, z2, err)

12: val(wrkString, x3, err)

22: val(wrkString, y3, err)

32: val(wrkString, z3, err)

end;


end;


CloseFile(f);

end;


{$WARNINGS ON}

// ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° вычислСния Π½ΠΎΡ€ΠΌΠ°Π»Π΅ΠΉ ΠΊ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌ списка

Model procedure TForml.CalcNormals;

var

i : Integer;

wrki, vxl, vyl, vzl, vx2, vy2, vz2 : Single;

nx, ny, nz : Single;

wrkVector : TD3DVector;

pwrkVector : ^TDSDVector;

wrkVectorl, wrkVector2, wrkVectorS : TD3DVector;

pwrkVectorl, pwrkVector2, pwrkVectorS : ATD3DVector;

begin

for i := 0 to Model.Count div 3 - 1 do begin pwrkVectorl := Model [i * 3 + 1];

wrkVectorl := pwrkVectorl^; pwrkVector2 := Model [i * 3];

wrkVector2 := pwrkVector2^-

pwrkVector3 := Model [i * 3 + 2];

wrkVectorS := pwrkVector3^;

// ΠŸΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΡ ΠΏΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ

vxl = wrkVectorl.X - wrkVector2.X;

vyl = wrkVectorl.Y - wrkVector2.Y;

vzl = wrkVectorl.Z - wrkVector2.Z;

vx2 = wrkVector2.X - wrkVectorS.X;

vy2 = wrkVector2.Y - wrkVectorS.Y;

vz2 = wrkVector2.Z - wrkVectorS.Z;

// Π’Π΅ΠΊΡ‚ΠΎΡ€, пСрпСндикулярный Ρ†Π΅Π½Ρ‚Ρ€Ρƒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

nx := vyl * vz2 - vzl * vy2;

ny := vzl * vx2 - vxl * vz2;

nz := vxl * vy2 - vyl * vx2;

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹

wrki := sqrt (nx * nx + ny * ny + nz * nz);

if wrki = 0 then wrki := 1; // Для прСдотвращСния дСлСния Π½Π° ноль

wrkVector.X := nx / wrki;

wrkVector.Y := ny / wrki;

wrkVector.Z := nz / wrki;

New (pwrkVector);

pwrkVector^ := wrkVector;

Normals.Add (pwrkVector);

end;


end;


procedure TForml.FormCreate(Sender: TObject);

var

i : Integer; t : TextFile;

p : ATD3DVector;

n : "TDSDVector;

begin

if OpenDialogl.Execute then begin

if SaveDialogl.Execute then begin

Model := TList.Create;

Normals := TList.Create;

LoadDxf (OpenDialogl.FileName);

CalcNormals;

Caption := 'Π’Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² - ' + IntToStr(Normals.Count);

AssignFile (t, SaveDialogl.FileName);

Rewrite (t);

// Π—Π°ΠΏΠΈΡΡŒ Π² тСкстовый Ρ„Π°ΠΉΠ» Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²

for i := 0 to Normals.Count - 1 do begin

n := Normals.Items [i];

// ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ выводится Π²Π΅ΠΊΡ‚ΠΎΡ€ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ ΠΊ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΡƒ

WriteLn (t, n.X);

WriteLn (t, n.Y);

WriteLn (t, n.Z);

// ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²

Ρ€ := Model.Items [i * 3};

WriteLn (t, p.X)

WriteLn (t, p.Y)

WriteLn (t, p.Z)

p := Model.Items [i * 3 + I];

WriteLn (t, p.X)

WriteLn (t, p.Y)

WriteLn (t, p.Z)

p := Model.Items [i * 3 + 2];

WriteLn (t, p.X)

WriteLn (t, p.Y)

WriteLn (t, p.Z)

end;


CloseFile (t);

Model. Free ;

Normals.Free ;

end;


end;


end;


Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΎΠΊΠ½Π° выводится количСство считанных Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ², вСдь эта информация потрСбуСтся для дальнСйшСго кодирования. Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ тСкстовым, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. Π’Π°ΠΊΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… манипуляций Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ модСль, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌ, ΠΏΡ€ΠΈ Π΅Π΅ воспроизвСдСнии, Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π° это Π΄Ρ€Π°Π³ΠΎΡ†Π΅Π½Π½ΠΎΠ΅ врСмя.

Π’ Internet сущСствуСт масса рСсурсов, содСрТащих свободно распространяСмыС ΠΌΠΎΠ΄Π΅Π»ΠΈ. НапримСр, Π½Π° сайтС http://www.3dcafe.com находятся сотни DXF-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ самой Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈΠ· этих ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ я воспользовался ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² настоящСй ΠΊΠ½ΠΈΠ³ΠΈ. Если ΠΆΠ΅ нуТная Π²Π°ΠΌ модСль записана Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

Π’Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ сущСствуСт мноТСство, я ΠΌΠΎΠ³Ρƒ ΠΏΠΎΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ 3D Exploration, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ X Dimension Software. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² ΠΈ поэтому заслуТиваСт вашСго внимания.

Π‘ любСзного Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, я помСстил Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диск, ΠΏΡ€ΠΈΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ ΠΊ ΠΊΠ½ΠΈΠ³Π΅, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ скачал с сайта http://www.xdsoft.com/explorer.

Π”ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ΡŒ всС ваши Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ вопросы ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ DXF-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… создан Ρ„Π°ΠΉΠ», Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я Π²Π°ΠΌ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π», Π΄Π΅Π»Π°Π΅Ρ‚ это ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ). Π’ Ρ‚Π°ΠΊΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ… самая громоздкая сСкция слСдуСт послС Ρ„Ρ€Π°Π·Ρ‹ ENTITIES, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ обязан ΠΈΠ΄Ρ‚ΠΈ большой массив Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π½Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π·Ρ‹.

Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ Π»ΠΈΠ±ΠΎ ΠΏΠΎ часовой стрСлкС, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π½Π΅Π΅. Если ΠΏΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ тСкстовому Ρ„Π°ΠΉΠ»Ρƒ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ модСль Ρƒ вас Π½Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ вопросов с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ отсСчСниС. Если Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ всСх Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΌ порядкС, Π° вмСсто ΠΌΠΎΠ΄Π΅Π»ΠΈ выводится Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚ΡƒΡ€, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° состоит Π² вычислСнии Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ΄Π΅ этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈ вычислСнии Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ я помСнял порядок пСрСчислСния Π²Π΅Ρ€ΡˆΠΈΠ½, ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π² Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ пСрпСндикулярны Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Π΅Ρ€ΡˆΠΈΠ½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΠΈ, Π²Ρ‹ Π½Π΅ потСряСтС ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° поиски подходящСго для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ DXF-Ρ„Π°ΠΉΠ»Π° порядка. И послСднСС, Ρ‡Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ придСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π½ΡƒΡŽ Ρ‚Π΅Π½ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ, - это ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅:


wrkVector.X := - nx / wrki;

wrkVector.Y := - ny / wrki;

wrkVector.Z := - nz / wrki;

МнС ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ коррСспондСнты ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ с Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ DXF-Ρ„Π°ΠΉΠ»ΠΎΠ², поэтому Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΊΡ€ΡƒΠ³ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ лишь двумя: Π»ΠΈΠ±ΠΎ Ρ„Π°ΠΉΠ» Π½Π΅ содСрТит Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠΎ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌ, Π»ΠΈΠ±ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΌ порядкС. Π’ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ.

Достоинствами использования DXF-Ρ„Π°ΠΉΠ»ΠΎΠ² являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΈ поддСрТиваСтся ΠΎΠ½ практичСски всСми ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ. НСдостатки Ρ‚Π°ΠΊΠΎΠ²Ρ‹:


* модСль строится ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ, нСзависимым Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ избыточности Π΄Π°Π½Π½Ρ‹Ρ…; это тСкстовый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, поэтому для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ гигантских Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ².

Однако Π² Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… эти Ρ„Π°ΠΉΠ»Ρ‹ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ ΠΊΠΎΠ΄Π°, нСпосрСдствСнно ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ прилоТСния ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, ΠΈ Π½Π΅Ρ‚ нСобходимости Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈΡ… вмСстС с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Наши ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ· тСкстового Ρ„Π°ΠΉΠ»Π°. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚ΠΎΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ большиС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, Π½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ обязаны ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹. ЗаписывайтС Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ вСщСствСнных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΈ объСм Ρ„Π°ΠΉΠ»Π° сразу ΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡΡ.