我需要将Lisp算法转换为Python或数学方程式。有任何必要的技能吗?
;; Bulge Center - Lee Mac
;; p1 - start vertex
;; p2 - end vertex
;; b - bulge
;; Returns the center of the arc described by the given bulge and vertices
(defun LM:BulgeCenter ( p1 p2 b )
(polar p1
(+ (angle p1 p2) (- (/ pi 2) (* 2 (atan b))))
(/ (* (distance p1 p2) (1+ (* b b))) 4 b)
)
)
答案 0 :(得分:3)
中缀符号看起来类似于:
polar(p1,
angle(p1,p2) + ( pi / 2 - 2 * atan(b)),
(distance(p1,p2) * (1 + b * b)) / (4 * b)
)
答案 1 :(得分:2)
这里有一个快速而肮脏的功能来美化它:
(ql:quickload :trivia)
(use-package :trivia)
(defun pretty (form)
(match form
('pi "\\pi{}")
((or 'p1 'p2) (format nil
"~{~(~a~)_{~a}~}"
(coerce (string form) 'list)))
((type symbol) (let ((name (string-downcase (string form))))
(if (= (length name) 1)
name
(format nil "\\text{~a}" name))))
((type number) (princ-to-string form))
((list '1+ x) (pretty `(+ ,x 1)))
((list* '* args) (if (= (length (remove-duplicates args)) 1)
(format nil
"~a^{~a}"
(pretty (first args))
(length args))
(format nil
"~{~a~^\\cdot{}~}"
(mapcar #'pretty args))))
((list '/ x) (pretty `(/ 1 ,x)))
((list '/ x y) (format nil
"\\frac{~a}{~a}"
(pretty x)
(pretty y)))
((list* '/ x args) (pretty `(/ ,x (* ,@args))))
((list* (guard op (member op '(+ -))) args)
(with-output-to-string (out)
(loop
initially (princ "\\left(" out)
for (a . b) on args
do (princ (pretty a) out)
while b
do (format out " ~a " op)
finally (princ "\\right)" out))))
((list* op args) (format nil
"~a\\left(~{~a~^, ~}\\right)"
(pretty op)
(mapcar #'pretty args)))))
在带引号的表达式上调用该表达式以获得LaTeX数学表达式。 例如,在Emacs / Slime下,以下形式后的 C-u C-x e 求值并将输出插入相同的缓冲区(您也可以使用REPL):
(progn
(princ
(pretty
'(polar p1
(+ (angle p1 p2) (- (/ pi 2) (* 2 (atan b))))
(/ (* (distance p1 p2) (1+ (* b b))) 4 b)
)))
(values))
然后您可以在最小文档中包含该字符串:
\documentclass{minimal}
\begin{document}
\[
\text{polar}\left(p_{1}, \left(\text{angle}\left(p_{1}, p_{2}\right) + \left(\frac{\pi{}}{2} - 2\cdot{}\text{atan}\left(b\right)\right)\right), \frac{\text{distance}\left(p_{1}, p_{2}\right)\cdot{}\left(b^{2} + 1\right)}{4\cdot{}b}\right)
\]
\end{document}
哪个给:
注意:如果您不想安装LaTeX,请使用例如http://www.codecogs.com/latex/eqneditor.php或http://www.sciweavers.org/free-online-latex-equation-editor。