26 Ιαν 2012

Απλή περίπτωση διανομής οικοπέδου


Έστω ότι έχουμε οικόπεδο σαν αυτό της εικόνας παραπλεύρως με τα ευθύγραμμα τμήματα 1- 3 και 2 - 4 να έχουν ενιαία κλίση . Οι 1-2 και 3-4 είναι παράλληλες . Αρκετές φορές συμβαίνει να θέλουμε να οριοθετήσουμε συγκεκριμένα εμβαδά δηλαδή , ποια θα έπρεπε να είναι η θέση του ορίου 3-4 αν το εμβαδό μας θέλαμε να είναι συγκεκριμένα τετραγωνικά μέτρα.










Αυτό , λύνεται προσεγγιστικά με δοκιμές αλλά υπάρχουν και ευκολότεροι τρόποι .

Πληκτρολογείστε τον κώδικα παρακάτω και αποθηκεύστε τον σε αρχείο με όνομα dianomi.lsp


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
(defun ang_between (p10 p11 p20 p21 / px p1 p2 l_pt l_d p ang)
 (setq px (inters p10 p11 p20 p21 nil))
 (cond
  (px
   (if (> (distance px p10) (distance px p11)) (setq p1 p10) (setq p1 p11))
   (if (> (distance px p20) (distance px p21)) (setq p2 p20) (setq p2 p21))
   (setq
    l_pt (list px p1 p2)
    l_d (mapcar 'distance l_pt (append (cdr l_pt) (list (car l_pt))))
    p (/ (apply '+ l_d) 2.0)
    ang (* (atan (sqrt (/ (* (- p (car l_d)) (- p (caddr l_d))) (* p (- p (cadr l_d)))))) 2.0)
   )
  )
  (T
   nil
  )
 )
)
(defun c:divarea ( / pt1 pt2 pt3 pt4 S1 ang1 ang2 x1 x2 ptx1 ptx2)
  (setq pt1 (getpoint "\nFirst point of baseline: "))
  (setq pt2 (getpoint pt1 "\nSecond point of baseline: "))
  (setq pt3 (getpoint pt1 "\nPoint of first adjacent side: "))
  (setq pt4 (getpoint pt2 "\nPoint of second adjacent side: "))
  (setq S1 (getreal "\nWanted area: "))
  (setq ang1 (ang_between pt1 pt2 pt1 pt3))
  (setq ang2 (ang_between pt2 pt1 pt2 pt4))
  (setq ang1 (- pi ang1) ang2 (- pi ang2))
  (setq x1
    (*
      (/
        (* (distance pt1 pt2) (sin ang1))
        (sin (+ ang1 ang2))
      )
      (1-
        (+ ;or can be "-"
          (sqrt
            (1+
              (/
                (* 2.0 S1 (sin (+ ang1 ang2)))
                (* (distance pt1 pt2) (distance pt1 pt2) (sin ang1) (sin ang2))
              )
            )
          )
        )
      )
    )
  )
  (setq x2 (/ (* x1 (sin ang2)) (sin ang1)))
  (setq ptx1 (polar pt1 (angle pt1 pt3) x2))
  (setq ptx2 (polar pt2 (angle pt2 pt4) x1))
  (command "_.line" "_none" ptx1 "_none" ptx2 "")
)

Στη συνέχεια "φορτώστε" το αρχείο Dianomi.lsp (Menu : Tools -> Autolisp -> Load Application).

Τρέξτε το πρόγραμμα γράφοντας απλά divarea στη γραμμή εντολών του Autocad.


Όταν θα σας ζητηθεί να υποδείξετε σημεία , δείξτε τα με τη σειρά 1 - 2 - 3 - 4 , όπως φαίνονται στην 1η εικόνα . Στη συνέχεια θα σας ζητηθεί το επιθυμητό εμβαδό . Δώστε π.χ. 6500 (τετρ. μέτρα) . Δείτε ότι σχεδιάστηκε γραμμή ώστε το διαγραμμισμένο γεωμετρικό χωρίο να έχει ακριβώς το εμβαδό που ζητήσατε.

Πιστεύω να φανεί χρήσιμο.