Sunday, September 23, 2018

HP 48G: Stefanescu Horatiu: Intersection of the Diagonals of a Quadrilateral

HP 48G:  Stefanescu Horatiu:  Intersection of the Diagonals of a Quadrilateral

The following program, written by Stefanescu Horatiu, calculates the intersection point of the two diagonals of a quadrilateral (partulator in Romanian). 



The program takes place in a directory PATRULATERDIAGONALE.  In order to type in the program, you will need to create a directory by using the CRDIR command. 

This program also works on the HP 49G series (48gii, 49G, 49g+) and the HP 50g. 

HP 48G Program PATRULATERDIAGONALE - Stefanescu Horatiu

Note:  You are going to notice how all the subroutines flow together, as the first program calls the next program. You will need to enter and store all the programs for the entire routine to work correctly.

On a personal note, I like how the text is spelled out one letter at time.  Hoartiu accomplishes this by using a FOR-NEXT structure which includes the commands 1 I  SUB 1 DISP.  (with I as the counter variable).

The text of the program is in Romanian. 

The program is presented here with permission from the author, with full credit going  to Stefanescu Horatiu.  I thank Horatiu in allowing me to feature his work on my blog.

STARTDIAGONALE:

<< CLEAR CLLCD 1 110 FOR I
"ACEST PROGRAM CALCUL
EAZA COORDONATELE PUN
CTULUI DE INTERSECTIE
A DIAGONALELOR UNUI
PATRULATER OARECARE."
1 I SUB 1 DISP
NEXT 0 WAIT
INTRODUCERE >>

INTRODUCERE:  (User input screen)

<< CLLCD 
"COORDONATE PATRULATER"
{"Ax" "Ay" "Bx"
"By" "Cx" "Cy" "Dx"
"Dy" } { 2 4 } { }
{ } INFORM DROP
OBJ→ DROP 'DY' STO
'DX' STO 'CY' STO
'CX' STO 'BY' STO
'BX' STO 'AY' STO
'AX' STO CLLCD
EMURILE >>

EMURILE:  (the start of the calculation routines)

<< 'CY-AY' →NUM 'M1' STO 
'-AX*(CY-AY)' →NUM 'M2' STO 
'CX-AX' →NUM 'M3' STO
'-AY*(CX-AX)' →NUM 'M4' STO
ENURILE >>

ENURILE:

<< 'BY-DY' →NUM 'N1' STO
'-DX*(BY-DY)' →NUM 'N2' STO
'BX-DX' →NUM 'N3' STO
'-DY*(BX-DX)' →NUM 'N4' STO
ESURILE >>

ESURILE:

<< 'N1-N3*M1/M3' →NUM 'S1' STO
'N3*(M2-M4)/M3+N4-N2' →NUM 'S2' STO
PURILE >>

PURILE:

<< 'S2/S1' →NUM 'PX' STO
'(PX*M1+M2-M4)/M3' →NUM 'PY' STO
REZULTATE >>

REZULTATE:   (display the results)

<< CLLCD 1 59 
FOR I 
"Coordonate punct de
intersectie ale dia
gonalelor: P(x,y)"
1 I SUB 1 DISP NEXT 4 FIX
"P(" PX + →STR ";" +
→STR PY + →STR ")" 
+ →STR 5 DISP 0 WAIT 
STERG >>

STERG:  (cleanup, purge working variables)

<< { AX AY BX BY CX 
CY DX DY PX PY M1
M2 M3 M4 N1 N2 N3
N4 S1 S2 } PURGE
CLLCD CLEAR >>

Instructions:

Set your calculator the folder PATRULATERDIAGONALE.  Run STARTDIAGONALE and enter the coordinates.  The rest of the program runs automatically.  Start with the left hand corner and go clockwise. 

Note:  I typed Horatiu's program on an HP 49G.    In REZULTATE, for some reason I couldn't get the FIX 4 to take effect, even when I switched the calculator to Approximate mode.  So in order to get both PX and PY on the screen, I added a carriage return character (↲, [right shift] [ 2 ]) after the semicolon.  This creates a new line allowing both coordinates to be displayed.

Example:

Example 1:   (Horatiu's example)
A:  (ax, ay):  (2, 10)
B:  (bx, by):  (11, 12)
C:  (cx, cy):  (13, 6)
D:  (dx, dy):  (1, 4)

P: (px, py):  (6.46875, 8.375)
FIX 4:  (6.4688, 8.3750)

Example 2:  (my own example)
A:  (ax, ay):  (0, 8)
B:  (bx, by):  (5, 12)
C:  (cx, cy):  (7, 7)
D:  (dx, dy):  (2, 1)

P:  (px, py): (3.72649999999, 7.4625)
FIX 4:  (3.7265, 7.4625)

Source:

Horatiu, Stefanescu "Calculul Coordonatelor Punctului de Intersectie A Diagonalelor Unui Partulater Oarecare"  2018. 

Eddie

All original content copyright, © 2011-2018.  Edward Shore.   Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited.  This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.  Please contact the author if you have questions.

1 comment:

HP 12C: Finding Two Factors of an Integer

HP 12C:  Finding Two Factors of an Integer  Introduction This program finds two factors of the integer N, where one of the factors ...