0% found this document useful (0 votes)
83 views4 pages

Trigonometry Formulas For Delphi Pascal

This document provides trigonometry formulas and functions for Delphi/Pascal to calculate distances, midpoints, angles, points on arcs and lines, intersections of lines, offsets of lines, and sides and angles of right triangles. It defines record types for points, lines, and arcs. It includes functions to calculate the distance between two points, midpoint between two points, angle between two points in degrees, point on an arc at a given angle, closest point on a line to another point, offset of a line, and intersection point of two lines. It also provides formulas to calculate the sides and angles of a right triangle given various inputs.

Uploaded by

stanley asd
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
83 views4 pages

Trigonometry Formulas For Delphi Pascal

This document provides trigonometry formulas and functions for Delphi/Pascal to calculate distances, midpoints, angles, points on arcs and lines, intersections of lines, offsets of lines, and sides and angles of right triangles. It defines record types for points, lines, and arcs. It includes functions to calculate the distance between two points, midpoint between two points, angle between two points in degrees, point on an arc at a given angle, closest point on a line to another point, offset of a line, and intersection point of two lines. It also provides formulas to calculate the sides and angles of a right triangle given various inputs.

Uploaded by

stanley asd
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

Trigonometry Formulas for Delphi / Pascal

type
tdPoint= record x,y,z:double; end;
tdLine= record Point1,Point2:tdPoint; end;
tdArc= record Center:tdPoint; r,sa,ea:double; end;
const
RADIANS=57.29577951;
Find Distance Between Two Points:
function distance2d(x1,y1,x2,y2:double):double;
var a,b,c:double;
begin
a:=abs(x1-x2);
b:=abs(y1-y2);
c:=sqr(a)+sqr(b);
if c>0 then result:=sqrt(c) else result:=0;
end;
function distance3d(x1,y1,z1,x2,y2,z2:double):double;
var c:double;
begin
c:=sqr(abs(x1-x2))+sqr(abs(y1-y2))+sqr(abs(z1-z2));
if c>0 then result:=sqrt(c) else result:=0;
end;

Find Midpoint Between Two Points


function midpoint(x1,y1,z1,x2,y2,z2:double):tdpoint;
var point1:tdpoint;
begin
point1.x:=((x2-x1)/2)+x1;
point1.y:=((y2-y1)/2)+y1;
point1.z:=((z2-z1)/2)+z1;
result:=point1;
end;
Get Angle in Degrees
// angle going from x1,y1 to x2,y2
function get_angle_degrees(x1,y1,x2,y2:double):double;
var
part1, part2:double;
angle:double;
begin
if (x1=x2) and (y1=y2) then
begin
result:=0.0;
exit;
end;
part1:=abs(y2-y1);
if (part1=0) then begin part1:=0.0000001; y1:=y1+0.0000001; end;
part2:=abs(x2-x1);
if (part2=0) then begin part2:=0.0000001; x1:=x1+0.0000001; end;
angle:=arctan(part1/part2)*RADIANS;
if ((x1>x2) and (y1<y2)) then angle:=180-angle;
if ((x1>x2) and (y1>y2)) then angle:=angle +180;
if ((x1<x2) and (y1>y2)) then angle:=360-angle;
angle:=fix_angle(angle);
result:=angle;
end;
Fix Angle
// if angle is outside of 0-360 then put it within 0-360
function fix_angle(angle:double):double;
begin
while angle>= 360.0 do
angle := angle - 360.0;
while angle < 0 do
angle := angle + 360.0;
result:=angle;
end;
Point On an Arc at an Angle
function point_arc_angle(circle1:TDArc;angle:double):TDPoint;
var a9:double;
point1:tdPoint;
begin
if circle1.r=0 then
begin
result:=circle1.center;
exit;
end;
a9:=angle/RADIANS;
point1.x:=circle1.center.x+circle1.r*cos(a9);
point1.y:=circle1.center.y+circle1.r*sin(a9);
point1.z:=circle1.center.z;
result:=point1;
end;
Get Closest Point to a Line
function get_closest_point_line(line1:TDLine;pick_point:TDPoint):TDPoint;
var angle:double;
arc1:TDArc;
temp_point:TDPoint;
TDLine2:TDLine;
return_point:tdPoint;
begin

angle:=get_angle_degrees(line1.point1.x,line1.point1.y,line1.point2.x,line1.point2.
y);
arc1.center.x:=pick_point.x;
arc1.center.y:=pick_point.y;
arc1.center.z:=pick_point.z;
arc1.r:=1;
temp_point:=point_arc_angle(arc1,angle+90);
line_2_points(pick_point,temp_point,TDLine2);
point_inter_2_lines(line1,TDLine2,return_point);
end;
Offset a Line
function offset_line(orig_line:TDLine;dist:double;pick_point:TDPoint):TDLine);
var angle1:double;
temp_point,new_end_point1,new_end_point2:TDPoint;
temp_line:T2DLine;
temp_circle:TDArc;
begin
get_closest_point_line(orig_line,pick_point,temp_point);
temp_line.point1:=temp_point;
temp_line.point2:=pick_point;
angle1:=get_angle_line(temp_line);
temp_circle.center:=orig_line.point1;
temp_circle.r:=dist;
point_arc_angle(temp_circle,angle1,new_end_point1);
temp_circle.center:=orig_line.point2;
point_arc_angle(temp_circle,angle1,new_end_point2);
new_line.point1:=new_end_point1;
new_line.point2:=new_end_point2;
end;
Find Point at the Intersection of Two Lines
function point_inter_2_lines(line1,line2:TDLine;var point1:TDPoint):integer;
var x1_start,y1_start,x1_end,y1_end,
x2_start,y2_start,x2_end,y2_end,
k1,b1,k2,b2:double;
ka,xa,xb:double;
begin
point_inter_2_lines:=0;

x1_start:=line1.point1.x;
y1_start:=line1.point1.y;
x1_end:=line1.point2.x;
y1_end:=line1.point2.y;

x2_start:=line2.point1.x;
y2_start:=line2.point1.y;
x2_end:=line2.point2.x;
y2_end:=line2.point2.y;

xa:=(x1_start-x1_end);
if abs(xa)<0.000001 then
begin
xa:=0.000001;
end;
k1:=(y1_start-y1_end)/xa;
b1:=(y1_start-(k1*x1_start));

xb:=(x2_start-x2_end);
if abs(xb)<0.000001 then
begin
xb:=0.000001;
end;

k2:=(y2_start-y2_end)/xb;
b2:=(y2_start-(k2*x2_start));

ka:=(k1-k2);
if ka=0.0 then begin point_inter_2_lines:=902;{Parallel Lines} exit; end;
if abs(ka)<0.000001 then
begin
ka:=0.000001;
end;

point1.x :=(b2-b1)/ka;
point1.y:=(k1*point1.x)+b1;
end;
function line_2_points(point1,point2:TDPoint;var line1:TDLine):integer;
begin
if (point1.x=point2.x)and(point1.y=point2.y)then line_2_points:=903{undefined
line} else line_2_points:=0;
line1.point1.x:=point1.x;
line1.point1.y:=point1.y;
line1.point1.z:=point1.z;
line1.point2.x:=point2.x;
line1.point2.y:=point2.y;
line1.point2.z:=point2.z;
end;
Find Sides and Angles of Right Triangle
Right Triangle

Some require system.math unit


To find side a:
a:=c * sin(A);
a:=b * tan(A);
a:=c * cos(B);
a:=b * cotan(B);
To find side b:
b:=c * cos(A);
b:=a * cotan(A);
b:=c * sin(B);
b:=a * tan(B);
To find side c:
c:=b * sec((A);
c:=a * csc(A);
c:=a * sec(B);
c:=b * csc(B);

c:= sqrt(sqr(a) + sqr(b));


To find angle A:
A:=arctan(a/b) * RADIANS;
A:=arcsin(a/c) * RADIANS;

A:=arccos(b/c) * RADIANS;
To find angle B:
B:=arctan(b/a) * RADIANS;
B:=arcsin(b/c) * RADIANS;

B:=arccos(a/c) * RADIANS;

You might also like