LINUX.ORG.RU

Есть ли такая рисующая графики софта

 , ,


0

2

Провожу из ординаты параллельную оси абсцисс линию которая пересекает какую-то кривую и точка, по абсциссе, пересечения кривой с прямой выдается автоматом. В gnuplot такого не нашел, а может просто нет такого.

Либо это программа для оцифровки графиков (Webplotdigitizer), либо любая софиига решающая уравнение для твоей кривой: уравнение кривой известно, значение функции в точке x тоже, остаётся найти x.

Во втором случае octave, scilab или, скорее даже, maxima.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от grem

gnuplot вроде как может сохранять в dxf, только я завести это не могу. У меня уравнение кривой около метра. По одному параметру получаю пять точек, точки скармливаю gnuplot. dxf формат был бы супер.

saufesma
() автор топика
Последнее исправление: saufesma (всего исправлений: 1)
Ответ на: комментарий от saufesma

Так функция неизвестна? Есть большой набор точек? Тогда просто возьми две ближайшие к заданной ординате и интерполируй хотя бы линейно, чтобы найти x для заданной ординаты.

grem ★★★★★
()
Ответ на: комментарий от grem

Прогнав вот это

(progn
(defvar *U*)
(defvar *I*)
(defvar *efc*)
(defvar *q*)

(defvar *alpha*)
(defvar *lambda*)
(defvar *gamma*)
(defvar *delta*)
(defvar *c*)
(defvar *v*)
(defvar *a*)
(defvar *b*)

(defvar *y0*)
(defvar *t*)
(defvar *partial-result*)
(defvar *result*))

(progn
(setq *U* 16)
(setq *I* 80)
(setq *efc* 0.7)
;;(setq *q*)

(setq *alpha* 0.0008)
(setq *lambda* 0.1)
(setq *gamma* 7.8)
(setq *delta* 0.3)
(setq *c* 0.16)
(setq *v* 0.3)
;;(setq *a*)
;;(setq *b*)

(setq *t* '(1 2 3 4 6 9 16 25 36))
(setq *y0* '(0 0.3 0.5 0.7 0.9 1 1.1 1.3 1.5 2.0 3.0 4.0 5.0)))


;;(defvar a)
;;(defvar b)
;;(setq a '(10 30 40))
;;(setq b '(1 2 3 4 5 6))
;;(map 'list
;;	(lambda (x)
;;	  (map 'list
;;		  (lambda (y) (* x y))
;;		  b))
;;	a)

;;# Коэффициент температуропроводности а = λ / (cγ), cм^2/сек
;;(setq *a* (/ *lambda* (* *c* *gamma*)))

;;# Коэффициент температуроотдачи	b = (2 * α) / (cγ * δ), 1/сек
;;(setq *b* (/ (* 2 *alpha*) (* *c* *gamma* *delta*)))

;;# Удельный тепловой поток, q	0.24 * U * I * η, кал / сек
;;#  η = *efc*
;;(setq *q* (* 0.24 *efc* *U* *I*))

;;# Ур-ие предельного состояния процесса распростронения тепла при нагреве
;;# пластины мощным быстродвижущимся линейным источником, ºС
;;# T0(y0, t1) = (q / (v * delta * (4 * pi * lambda * c1 * gamma *
;;t)^(1/2))) *
;;# exp (- (y0^2 / (4 * a * t)) - (b * t))

(defun A (*q* *v* *delta* *lambda* *c* *gamma* *t*)
  (/ *q* (* *v* *delta* (sqrt (* 4 pi *lambda* *c* *gamma* *t*)))))

(defun B (*y0* *a* *t* *b*)
  (exp (- (/ (* -1 (* *y0* *y0*)) (* 4 *a* *t*)) (* *b* *t*))))
;;(B *y0* *a* *t* *b*)
;; (setq *t* '(1 2 3 4 6 9 16 25 36))
;; (setq *y0* '(0 0.3 0.5 0.7 0.9 1 1.1 1.3 1.5 2.0 3.0 4.0 5.0))

(defun T (*q* *v* *delta* *lambda* *c* *gamma* *y0* *a* *t* *b*)
  (mapcar
    (lambda (*t*)
      (mapcar
        (lambda (y0)
          (* (A *q* *v* *delta* *lambda* *c* *gamma* *t*)
              (B y0 *a* *t* *b*)))
        *y0*))
    *t*))

;;(defun print-II (II s)
;;  (mapcar (lambda (I)
;;	    (mapcar (lambda (x)
;;		      (princ x s) (princ " " s))
;;		    I)
;;	    (terpri s))
;;	  II))


(defun print-ll (ll s)
  (terpri s t)
  (if (null (car ll)) nil
    (print-ll (mapcar (lambda (l) (princ (car l) s) (princ " " s) (cdr l)) ll) s)))
 
;;А добавить нули второй колонкой как-то так.
 
;;(defun add-0 (ll)
;;  (cons (car ll)
;;    (cons (mapcar (lambda (x) 0) (car ll)) (cdr ll))))
 
;;Использовать вместе (print-ll (add-0 ll))

;;(defun append-to-buffer (buffer start end)
;;"Append the text of the region to BUFFER."
;;(interactive "BAppend to buffer: \nr")
;;(let ((oldbuf (current-buffer)))
;;(save-current-buffer
;;(set-buffer (get-buffer-create buffer))
;;(insert-buffer-substring oldbuf start end))))
(require 'widget)
(eval-when-compile
(require 'wid-edit))

(defun input ()
  (interactive)
  (switch-to-buffer "Линейный подвижный источник в пластине с теплоотдачей (ЛПИПТ)")
  (kill-all-local-variables)
  (let ((inhibit-read-only t))
    (erase-buffer))
  (remove-overlays)
  (widget-insert "        Ввод параметров\n\n")

   (widget-create 'editable-field
		 :size 47
		 :value "'(0 0.3 0.5 0.7 0.9 1 1.1 1.3 1.5 2.0 3.0 4.0 5.0)"
		 :format "Координата, y0:       %v см"
		 :notify (lambda (widget &rest ignore)
			   (setq *y0*
				 (string-to-number
				  (widget-value widget)))))

   (widget-insert "\n")

   (widget-create 'editable-field
		 :size 20
		 :value "'(1 2 3 4 6 9 16 25 36)"
		 :format "Время, t:             %v сек"
		 :notify (lambda (widget &rest ignore)
			   (setq *t*
				 (string-to-number
				  (widget-value widget)))))

   (widget-insert "\n\n")
(widget-insert "Выбор эффективного КПД: \n")
(widget-insert "- при наплавке на плоскость	0.55\n")
(widget-insert "- при сварке встык	        0.7\n")
(widget-insert "- при центральном нпгреве	0.5\n")
(widget-insert "\n")
   (widget-create 'editable-field
		 :size 6
		 :value "0.7"
		 :format "Эффективный КПД:      %v"
		 :notify (lambda (widget &rest ignore)
			   (setq *efc*
				 (string-to-number
				  (widget-value widget)))))

   (widget-insert "\n")

      (widget-create 'editable-field
		 :size 6
		 :value "16"
		 :format "Напряжение:           %v В"
		 :notify (lambda (widget &rest ignore)
			   (setq *U*
				 (string-to-number
				  (widget-value widget)))))

      (widget-insert "\n")

         (widget-create 'editable-field
		 :size 6
		 :value "80"
		 :format "Ток:                  %v А" 
		 :notify (lambda (widget &rest ignore)
			   (setq *I*
				 (string-to-number
				  (widget-value widget)))))

    (widget-insert "\n")

   (widget-create 'editable-field
		 :size 6
		 :value "0.3"
		 :format "Скорость перемещения 
источника тепла, v:   %v см / сек"
		 :notify (lambda (widget &rest ignore)
			   (setq *v*
				 (string-to-number
				  (widget-value widget)))))

    (widget-insert "\n")
    

(widget-create 'editable-field
		 :size 6
		 :value "0.1"
		 :format "Коэффициент 
теплопроводности, λ:  %v кал/см сек ºС"
		 :notify (lambda (widget &rest ignore)
			   (setq *lambda*
				 (string-to-number
				  (widget-value widget)))))

(widget-insert "\n")

(widget-create 'editable-field
		 :size 6
		 :value "0.16"
		 :format "Удельная 
теплоёмкость, с:      %v кал/г ºС"
		 :notify (lambda (widget &rest ignore)
			   (setq *c*
				 (string-to-number
				  (widget-value widget)))))

(widget-insert "\n")


(widget-create 'editable-field
		 :size 6
		 :value "0.0008"
		 :format "Коэффициент 
теплоотдачи, α:       %v кал/см^2 сек ºС"
		 :notify (lambda (widget &rest ignore)
			   (setq *alpha*
				 (string-to-number
				  (widget-value widget)))))

(widget-insert "\n")

(widget-create 'editable-field
		 :size 6
		 :value "7.8"
		 :format "Удельный вес, γ:      %v г/см^3"
		 :notify (lambda (widget &rest ignore)
			   (setq *gamma*
				 (string-to-number
				  (widget-value widget)))))

(widget-insert "\n")

(widget-create 'editable-field
		 :size 6
		 :value "0.3"
		 :format "Толщина пластины, δ:  %v cм"
		 :notify (lambda (widget &rest ignore)
			   (setq *delta*
				 (string-to-number
				  (widget-value widget)))))


(widget-insert "\n\n\n")

 (widget-create 'push-button
		   :notify (lambda (&rest ignore)
			     (progn
;;# Коэффициент температуропроводности а = λ / (cγ), cм^2/сек
(setq *a* (/ *lambda* (* *c* *gamma*)))

;;# Коэффициент температуроотдачи	b = (2 * α) / (cγ * δ), 1/сек
(setq *b* (/ (* 2 *alpha*) (* *c* *gamma* *delta*)))

;;# Удельный тепловой поток, q	0.24 * U * I * η, кал / сек
;;#  η = *efc*
(setq *q* (* 0.24 *efc* *U* *I*))

(setq *partial-result* (T *q* *v* *delta* *lambda* *c* *gamma* *y0* *a* *t* *b*))
(setq *result* (cons *y0* *partial-result*))
(print-ll *result* (generate-new-buffer "file1.dat"))
      
				   );;end of progn
)

"Поехали")
(widget-insert " ") 
  (widget-create 'push-button
                 :notify (lambda (&rest ignore)
                           (input))
                 "Reset")
       (widget-insert "\n")

       (use-local-map widget-keymap)
(widget-setup))

saufesma
() автор топика
Ответ на: комментарий от grem

потом это, а я сечас запустить все это не могу вспомнить как и все увидишь сам

set mxtics 10
set mytics 10
set xlabel 'cm'
set ylabel 'T,C'
set grid mxtics mytics
set label 1 at 0.1, 1800
set label 1 '1 sec'
set label 2 at 0.1, 1400
set label 2 '2 sec'
set label 3 at 0.1, 1100
set label 3 '3 sec'
set label 4 at 0.1, 950
set label 4 '4 sec'
set label 5 at 0.1, 790
set label 5 '6 sec'
set label 6 at 0.1, 640
set label 6 '9 sec'
set label 7 at 0.1, 480
set label 7 '16 sec'
set label 8 at 0.1, 390
set label 8 '25 sec'
set label 9 at 0.1, 250
set label 9 '36 sec'
set arrow 1 nohead from 0, 1200 to 1, 1200
set arrow 2 nohead from 0, 1100 to 1, 1100
set arrow 3 nohead from 0, 600 to 1, 600
set arrow 4 nohead from 0, 200 to 2, 200
plot 'complete-column.dat' using 1:2 with lines, \
''using 1:3 with lines, \
''using 1:4 with lines, ''using 1:5 with lines, \
''using 1:6 with lines, \
''using 1:7 with lines, ''using 1:8 with lines, ''using 1:9 with lines, \
''using 1:10 with lines

saufesma
() автор топика