{*****************************************************************************} {************** Datei Anfang ***********************************************} {*****************************************************************************} {*** Fuer Ausdruck: &r &n &d &u Seite &s **} {*** Fuer Ausdruck: &r Seite &s **} {*** Fuer Ausdruck: Fixsys 5Pt **} {Datei: :/hc_me10/hc_schnittpunkt_setzen_v4.txt} {09:28 16.01.2013} define hc_schnittpunkt_setzen {Haupt-Prgm} local P1 {Punkt1 } local w1 {Winkel1 } local p2 {Punkt2 } local w2 {Winkel2 } local z0 {Zaehler0; Anzahl der Elemente} local z1 {Zaehler1} local z2 {Zaehler2} local datei {tmp_datei1} let datei 'c_line_liste_1.txt' inq_selected_elem c_lines all let z0 (inq 14) {Anzahl Elemente} let z1 0 let z2 1 {Zaehler z2 auf 1; Reduktion der Punkt-Berechnungen} if (z0 > 1) {Berechnung nur sinnvoll. wenn min. 2 Elemente vorhanden sind} open_outfile 1 del_old datei loop {Elemente in eine Liste schreiben} exit_if ((inq 14) = 0) let p1 (inq 101) {Mittelpunkt der Linie} let w1 ((inq 3) mod 180) {Winkel zur X-Achse der Linie} write_file 1 (str p1 + ' ' + str w1) inq_next_elem end_loop close_file 1 loop {Werte auslesen und Punkte berechnen} let z1 (z1 + 1) hc_lese_daten datei z1 let p1 hc_schnittpunkt let w1 hc_schnittwinkel loop let z2 (z2 + 1) hc_lese_daten datei z2 let p2 hc_schnittpunkt let w2 hc_schnittwinkel if (w1 <> w2) {parallele Linien ausschliessen} hc_schnittpunkt_ber p1 w1 p2 w2 end_if exit_if (z2 >= z0) end_loop let z2 z1 exit_if (z1 = z0) end_loop purge_file datei confirm else display ('Nur ' + str z0 + ' Linie(n) gefunden. Programm Ende.') end_if end_define define hc_lese_daten {Datenausleseroutine} parameter datei parameter zeile local p local w local t_zeile local z open_infile 1 datei let z 0 repeat let z(z + 1) read_file 1 t_zeile until (z = zeile) let p (val (substr t_zeile 1 (pos t_zeile ' '))) let w (val (substr t_zeile (pos t_zeile ' ') (len t_zeile))) let hc_schnittpunkt p let hc_schnittwinkel w close_file 1 end_define define hc_schnittpunkt_ber {Schnittpunktsberechnung} parameter p1 parameter w1 parameter p2 parameter w2 local x1 local y1 local x2 local y2 local s1 local s2 local a1 local a2 local xs local ys local pntxy let x1 (x_of p1) let y1 (y_of p1) let x2 (x_of p2) let y2 (y_of p2) if ((abs w1 <> 90) and (abs w2 <> 90)) {Allgemeinfall} let s1 (tan w1) let s2 (tan w2) let a1 (y1 - (s1 * x1)) let a2 (y2 - (s2 * x2)) let xs ((a2 - a1)/(s1 - s2)) let ys (((s1 * a2) - (s2 * a1))/(s1 - s2)) else_if ((abs w1 = 90) and (abs w2 <> 90)) {1. Element senkrecht} let s2 (tan w2) let xs x1 let ys (y2 + (s2 * (x1 - x2))) else_if ((abs w1 <> 90) and (abs w2 = 90)) {2. Element senkrecht} let s1 (tan w1) let xs x2 let ys (y1 + (s1 * (x2 - x1))) end_if let Pntxy (pnt_xy xs ys) {Punkt setzen} inq_elem pntxy if (inq 403 <> point) point pntxy end end_if end_define define hc_schnittpunkt {Globale Variable} 0,0 end_define define hc_schnittwinkel {Globale Variable} 0 end_define