Unghiul si distanta in functie de coordonate

Creat de Rasta, Noi 21, 2011, 02:40 PM

« precedentul - următorul »

Rasta

Salut,

Vreau sa stiu si eu daca exista vreo optiune in TopoLT(sau alt program daca exista) care sa imi calculeze unghiul si distanta intre doua puncte daca le stiu coordonatele.

Va multumesc anticipat!

djxhouse

intre 2 puncte nu exista unghi.
Te referi la orientare, nu?

cat despre distante  vezi TOPOLT - utile - coteaza polilinie   sau multiple cotari de polilinii

diagodose2009

Tu incearca programul (anexa14.vlx) sub autocad,
Programul calculeaza unghiuri, verticale, unghiuri orizontale, (adica coordonatele polare pentru statii totale,vezi pagina...................

http://www.puiubrat.3x.ro/carto3A/bya_topoltopt.html" target="_blank">www.puiubrat.3x.ro/carto3A/bya_topoltopt.html
 :razz:

Modificat de diagodose2009 (21-11-2011 22:22:57)

Rasta

Da, cand ziceam unhghii ma refeream la orientare. Ma intereseaza sa aflu din punctul X(caruia ii stiu coordonatele) orientarea si distanta catre un alt punct Y caruia ii stiu doar coordonatele. Cat despre programul ala zice ca a fost sters de pe sitelu pe care a fost urcat la download

John Doe

Trage o linie intre puncte si vezi cat de lunga e si ai distanta. Trage o linie verticala in punctul de plecare si vezi ce unghi ai de la verticala asta, masurând de la verticala in sensul acelor de ceasornic pana dai peste linia ta si aia e orientarea. Cu comanda DIMANGULAR, cu unitatile setate pe centesimale.
Sau foloseste formula: orientarea=arctangenta (Y2-Y2)/(X2-X1) daca punctul 1 are X1,Y1 si punctul 2 are X2,Y2.

Cred ca exista ceva postat free si la sectiunea LISP, dar nu e fix ce vrei tu. La ce iti trebuie, concret, datele astea? Ai multe cazuri de determinat?

Rasta

#5
CitatTrage o linie intre puncte si vezi cat de lunga e si ai distanta. Trage o linie verticala in punctul de plecare si vezi ce unghi ai de la verticala asta, masurând de la verticala in sensul acelor de ceasornic pana dai peste linia ta si aia e orientarea. Cu comanda DIMANGULAR, cu unitatile setate pe centesimale.
Sau foloseste formula: orientarea=arctangenta (Y2-Y2)/(X2-X1) daca punctul 1 are X1,Y1 si punctul 2 are X2,Y2.

Cred ca exista ceva postat free si la sectiunea LISP, dar nu e fix ce vrei tu. La ce iti trebuie, concret, datele astea? Ai multe cazuri de determinat?

nu multe, vreo 400 :)). Trebuie sa fac un carnet de teren pentru niste tarlale si in cazul asta e mai dificil sa le iau pe fiecare in parte. Practic eu vreau sa fac o masurare ca in teren, insa din fata calculatorului. Sa stau in statiile 100 si 101 si sa calculez distanta si orientarea catre cele 400 de puncte

Modificat de Rasta (21-11-2011 21:58:58)

John Doe

#6
Bine. Postez mai jos un cod care se poate lua cu copy de aici, se da paste intr-un fisier text la care se  pune dupa aceea extensia LSP in loc de TXT, se incarca cu APPLOAD si... spor!
Repet: nu e chiar ce vrei tu, dar s-ar putea sa te ajute. La inceputul fisierului am si scris cam ce face; iti considera ca puncte numai vertexurile de polilinii, deci daca punctele tale sunt unite cu polilinii e ok.
Alta hiba e ca programul isi numeroteaza singur punctele, nu tine cont de numerele pe care le ai tu in desen. Asa ca ori le lasi pe ale lui, ori zici sa ti le scrie si pe ale lui in desen ca sa-ti dai seama care ar fi corespondenta.

;;;Pentru generare carnet de teren
;;;trebuie sa avem pe plan polilinii si punctele de statie si de orientare; liniile nu se pun, deocamdata
;;;Genereaza lânga desen fisierul CARNET.csv in forma:  [PS]  [PV]  [X]  [Y]  [Dx]  [Dy]  [Dist redusa]  [Orientare]
;;;numerotarea pleaca de la nr. 100 in carnet, punctele se pot pune sau nu pe ecran
;;;punctul de orientare se citeste si el oricum, asa ca il scriem si in carnet

(command "units" "2" "3" "3" "4" "0.0000" "N")
(graphscr)


(defun C:CARNET ()
(setq msel (ssget (list (cons 0 "LWPOLYLINE")(cons 410 "MODEL"))))
(setq lng (sslength msel))
(setq index 0)
(setq ncor (getint "\nNumerotare puncte începând cu <100>: "))
(if (= nil ncor)(setq ncor 100))
(setq des "q")
(while (AND (/= des "y")(/= des "Y")(/= des "n")(/= des "N")(/= des ""))
(setq des (getstring "\nScriem numarul punctelor pe desen? Yes/No <Y>:"))
);;;while
(if (= des "")(setq des "Y"))
(setq des (strcase des))
(setq fis (open "Fiscord.txt" "w"));;;---asta e temporar, va fi sters la sfarsit

(while (< index lng)
(setq nent (ssname msel index))
(setq index (+ 1 index))
(setq lent (entget nent))
(setq cont 0);;;numar de ordine al componentelor entitatii-lista, si daca da de codul de grup 10  extrage coordonatele
(while (setq entc (nth cont lent))
(setq cont (+ 1 cont))
(if (= 10 (car entc))(progn
(setq ncor (+ 1 ncor))
(write-line (itoa ncor) fis)
(setq x (cadr entc))
(write-line (rtos x 2 3) fis)
(setq y (caddr entc))
(write-line (rtos y 2 3) fis)
(if (= des "Y")(command "text" (list (+ 1 x) (+ 1 y)) 3 0 ncor))

));;PROGN si IF
);;WHILE pe fiecare entitate
);;;WHILE de la index entitati
(close fis)

;;;------------------Acum avem fisierul de coordonate, il citim si facem carnetul de teren

(setvar "osmode" 8);;;------------pentru "Node"
(setq ps (getpoint "\nSELECTATI PUNCTUL DE STATIE:"))
(setq nps (getstring "\nNUMAR PUNCT STATIE: "))
(setq po (getpoint "\nSELECTATI PUNCTUL DE ORIENTARE:"))
(setq npo (getstring "\nNUMAR PUNCT DE ORIENTARE: "))
(setq ys (nth 0 ps))
(setq xs (nth 1 ps))
(setq yo (nth 0 po))
(setq xo (nth 1 po))
(setq dx (- xo xs));;;---real
(setq dy (- yo ys));;;---real
(setq dist (distance ps po));;;---real
(setq orient (angle ps po))
(setq orient (angtos orient 2 4));;;---string
(setq orient (atof orient))

(if (AND (> dx 0) (> dy 0))(setq orient (- 100 orient)));;;---cadran 1
(if (AND (> dx 0) (< dy 0))(setq orient (- 500 orient)));;;---cadran 2
(if (AND (< dx 0) (< dy 0))(setq orient (- 500 orient)));;;---cadran 3
(if (AND (< dx 0) (> dy 0))(setq orient (- 500 orient)));;;---cadran 4

(setq cale (getvar "dwgprefix"))
(setq fis2 (open (strcat cale "Carnet.csv") "w"))
(write-line (strcat "Punct statie: " nps) fis2)
(write-line (strcat "Punct orientare: " npo ) fis2)
(write-line "" fis2)
(write-line "" fis2)
(write-line "PS,PV,X,Y,Dx,Dy,Dist. red.,Orientare" fis2)
(write-line (strcat nps "," npo "," (rtos xo) "," (rtos yo) "," (rtos dy) "," (rtos dx) "," (rtos dist) "," (rtos orient 2 4) ) fis2)

(setq nfis1 (open "Fiscord.txt" "r" ))

;;;---------------citim pe rand fiecare linie din fisier
(while (setq np (read-line nfis1))
(setq yp (read-line nfis1))
(setq xp (read-line nfis1))
(setq xp (atof xp))
(setq yp (atof yp))
(setq dx (- xp xs))
(setq dy (- yp ys))
(setq dist (distance ps (list yp xp)))
(setq orient (angle ps (list yp xp)))
(setq orient (angtos orient 2 4));;;string
(setq orient (atof orient))
(if (AND (> dx 0) (> dy 0))(setq orient (- 100 orient)));;;---cadran 1
(if (AND (> dx 0) (< dy 0))(setq orient (- 500 orient)));;;---cadran 2
(if (AND (< dx 0) (< dy 0))(setq orient (- 500 orient)));;;---cadran 3
(if (AND (< dx 0) (> dy 0))(setq orient (- 500 orient)));;;---cadran 4

(write-line (strcat "," np "," (rtos xp) "," (rtos yp) "," (rtos dy) "," (rtos dx) "," (rtos dist) "," (rtos orient 2 4) ) fis2)

);;;while de la citire fisier
(close nfis1);;;inventarul de coordonate
(close fis2);;;carnetul de teren

(command "sh" "del Fiscord.txt")
(setq linie (strcat "Fisierul CARNET.csv a fost creat in locatia:  \n" cale ))
(alert linie)
);;;defun CARNET



(alert "Pentru generate carnet de teren, dati comanda CARNET")


diagodose2009

#7
JohnDoe, programul tău e okai, dar mai trebuie la acest program LISP mici detalii tehnice de programare...ca să fie complet..........
Stimate domn , "RASTA" testeaza programul anexa14.vlx care scoate exact un carnet de teren... La final , exportă un tabel EXCEL care conţine (unghiuri verticale, distante orizontale, unghiuri orizontale, înălţimea prismei, înăltime teodolit...)
Adică programul preia cotele din punctele TOPOLT raportate şi in functie de cotele Z , programul VLX determină coordonatele-polare-măsurate pe care un teodolit clasic - electronic le determină pe teren..........
http://www.puiubrat.3x.ro/carto3A/bya_topoltopt.files/pp_topolt_anexa14.html
Care este avantajul, acestui programul LISP/VLX ?
El  funtionează bine pe planuri  TOPOLT...in care punctele sunt raportate deja in desen...si au cote Z

Orice problema dă-mi mesaj private............

t

Modificat de diagodose2009 (21-11-2011 22:26:56)

goguletz


John Doe