首页
\
问答
\
Ruby试图动态创建unicode字符串抛出“无效的Unicode转义”错误(Ruby trying to dynamically create unicode string throws “invalid Unicode escape” error)
Ruby试图动态创建unicode字符串抛出“无效的Unicode转义”错误(Ruby trying to dynamically create unicode string throws “invalid Unicode escape” error)
我有一个要求,其中我想使用插值动态创建一个unicode字符串。例如,请参阅以下在irb中尝试的代码
2.1.2 :016 > hex = 0x0905 => 2309 2.1.2 :017 > b = "\u#{hex}" SyntaxError: (irb):17: invalid Unicode escape b = "\u#{hex}"
十六进制代码0x0905对应于DEVANAGARI LETTER A的独立元音的unicode。
我无法弄清楚如何达到预期的效果。
I have a requirement wherein I want to dynamically create a unicode string using interpolation.For e.g. please see the following code tried out in irb
2.1.2 :016 > hex = 0x0905 => 2309 2.1.2 :017 > b = "\u#{hex}" SyntaxError: (irb):17: invalid Unicode escape b = "\u#{hex}"
The hex-code 0x0905 corresponds to unicode for independent vowel for DEVANAGARI LETTER A.
I am unable to figure how to achieve the desired result.
原文:https://stackoverflow.com/questions/27124145
更新时间:2021-10-01 13:10
最满意答案
这是我使用的纯Python O(n)实现:
import math """ Minimal Enclosing Parallelogram area, v1, v2, v3, v4 = mep(convex_polygon) convex_polygon - array of points. Each point is a array [x, y] (1d array of 2 elements) points should be presented in clockwise order. the algorithm used is described in the following paper: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.53.9659&rep=rep1&type=pdf """ def distance(p1, p2, p): return abs(((p2[1]-p1[1])*p[0] - (p2[0]-p1[0])*p[1] + p2[0]*p1[1] - p2[1]*p1[0]) / math.sqrt((p2[1]-p1[1])**2 + (p2[0]-p1[0])**2)) def antipodal_pairs(convex_polygon): l = [] n = len(convex_polygon) p1, p2 = convex_polygon[0], convex_polygon[1] t, d_max = None, 0 for p in range(1, n): d = distance(p1, p2, convex_polygon[p]) if d > d_max: t, d_max = p, d l.append(t) for p in range(1, n): p1, p2 = convex_polygon[p % n], convex_polygon[(p+1) % n] _p, _pp = convex_polygon[t % n], convex_polygon[(t+1) % n] while distance(p1, p2, _pp) > distance(p1, p2, _p): t = (t + 1) % n _p, _pp = convex_polygon[t % n], convex_polygon[(t+1) % n] l.append(t) return l # returns score, area, points from top-left, clockwise , favouring low area def mep(convex_polygon): def compute_parallelogram(convex_polygon, l, z1, z2): def parallel_vector(a, b, c): v0 = [c[0]-a[0], c[1]-a[1]] v1 = [b[0]-c[0], b[1]-c[1]] return [c[0]-v0[0]-v1[0], c[1]-v0[1]-v1[1]] # finds intersection between lines, given 2 points on each line. # (x1, y1), (x2, y2) on 1st line, (x3, y3), (x4, y4) on 2nd line. def line_intersection(x1, y1, x2, y2, x3, y3, x4, y4): px = ((x1*y2 - y1*x2)*(x3 - x4) - (x1 - x2)*(x3*y4 - y3*x4))/((x1-x2)*(y3-y4) - (y1-y2)*(x3-x4)) py = ((x1*y2 - y1*x2)*(y3 - y4) - (y1 - y2)*(x3*y4 - y3*x4))/((x1-x2)*(y3-y4) - (y1-y2)*(x3-x4)) return px, py # from each antipodal point, draw a parallel vector, # so ap1->ap2 is parallel to p1->p2 # aq1->aq2 is parallel to q1->q2 p1, p2 = convex_polygon[z1 % n], convex_polygon[(z1+1) % n] q1, q2 = convex_polygon[z2 % n], convex_polygon[(z2+1) % n] ap1, aq1 = convex_polygon[l[z1 % n]], convex_polygon[l[z2 % n]] ap2, aq2 = parallel_vector(p1, p2, ap1), parallel_vector(q1, q2, aq1) a = line_intersection(p1[0], p1[1], p2[0], p2[1], q1[0], q1[1], q2[0], q2[1]) b = line_intersection(p1[0], p1[1], p2[0], p2[1], aq1[0], aq1[1], aq2[0], aq2[1]) d = line_intersection(ap1[0], ap1[1], ap2[0], ap2[1], q1[0], q1[1], q2[0], q2[1]) c = line_intersection(ap1[0], ap1[1], ap2[0], ap2[1], aq1[0], aq1[1], aq2[0], aq2[1]) s = distance(a, b, c) * math.sqrt((b[0]-a[0])**2 + (b[1]-a[1])**2) return s, a, b, c, d z1, z2 = 0, 0 n = len(convex_polygon) # for each edge, find antipodal vertice for it (step 1 in paper). l = antipodal_pairs(convex_polygon) so, ao, bo, co, do, z1o, z2o = 100000000000, None, None, None, None, None, None # step 2 in paper. for z1 in range(0, n): if z1 >= z2: z2 = z1 + 1 p1, p2 = convex_polygon[z1 % n], convex_polygon[(z1+1) % n] a, b, c = convex_polygon[z2 % n], convex_polygon[(z2+1) % n], convex_polygon[l[z2 % n]] if distance(p1, p2, a) >= distance(p1, p2, b): continue while distance(p1, p2, c) > distance(p1, p2, b): z2 += 1 a, b, c = convex_polygon[z2 % n], convex_polygon[(z2+1) % n], convex_polygon[l[z2 % n]] st, at, bt, ct, dt = compute_parallelogram(convex_polygon, l, z1, z2) if st < so: so, ao, bo, co, do, z1o, z2o = st, at, bt, ct, dt, z1, z2 return so, ao, bo, co, do, z1o, z2o
Here is the pure Python O(n) implementation I used:
import math """ Minimal Enclosing Parallelogram area, v1, v2, v3, v4 = mep(convex_polygon) convex_polygon - array of points. Each point is a array [x, y] (1d array of 2 elements) points should be presented in clockwise order. the algorithm used is described in the following paper: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.53.9659&rep=rep1&type=pdf """ def distance(p1, p2, p): return abs(((p2[1]-p1[1])*p[0] - (p2[0]-p1[0])*p[1] + p2[0]*p1[1] - p2[1]*p1[0]) / math.sqrt((p2[1]-p1[1])**2 + (p2[0]-p1[0])**2)) def antipodal_pairs(convex_polygon): l = [] n = len(convex_polygon) p1, p2 = convex_polygon[0], convex_polygon[1] t, d_max = None, 0 for p in range(1, n): d = distance(p1, p2, convex_polygon[p]) if d > d_max: t, d_max = p, d l.append(t) for p in range(1, n): p1, p2 = convex_polygon[p % n], convex_polygon[(p+1) % n] _p, _pp = convex_polygon[t % n], convex_polygon[(t+1) % n] while distance(p1, p2, _pp) > distance(p1, p2, _p): t = (t + 1) % n _p, _pp = convex_polygon[t % n], convex_polygon[(t+1) % n] l.append(t) return l # returns score, area, points from top-left, clockwise , favouring low area def mep(convex_polygon): def compute_parallelogram(convex_polygon, l, z1, z2): def parallel_vector(a, b, c): v0 = [c[0]-a[0], c[1]-a[1]] v1 = [b[0]-c[0], b[1]-c[1]] return [c[0]-v0[0]-v1[0], c[1]-v0[1]-v1[1]] # finds intersection between lines, given 2 points on each line. # (x1, y1), (x2, y2) on 1st line, (x3, y3), (x4, y4) on 2nd line. def line_intersection(x1, y1, x2, y2, x3, y3, x4, y4): px = ((x1*y2 - y1*x2)*(x3 - x4) - (x1 - x2)*(x3*y4 - y3*x4))/((x1-x2)*(y3-y4) - (y1-y2)*(x3-x4)) py = ((x1*y2 - y1*x2)*(y3 - y4) - (y1 - y2)*(x3*y4 - y3*x4))/((x1-x2)*(y3-y4) - (y1-y2)*(x3-x4)) return px, py # from each antipodal point, draw a parallel vector, # so ap1->ap2 is parallel to p1->p2 # aq1->aq2 is parallel to q1->q2 p1, p2 = convex_polygon[z1 % n], convex_polygon[(z1+1) % n] q1, q2 = convex_polygon[z2 % n], convex_polygon[(z2+1) % n] ap1, aq1 = convex_polygon[l[z1 % n]], convex_polygon[l[z2 % n]] ap2, aq2 = parallel_vector(p1, p2, ap1), parallel_vector(q1, q2, aq1) a = line_intersection(p1[0], p1[1], p2[0], p2[1], q1[0], q1[1], q2[0], q2[1]) b = line_intersection(p1[0], p1[1], p2[0], p2[1], aq1[0], aq1[1], aq2[0], aq2[1]) d = line_intersection(ap1[0], ap1[1], ap2[0], ap2[1], q1[0], q1[1], q2[0], q2[1]) c = line_intersection(ap1[0], ap1[1], ap2[0], ap2[1], aq1[0], aq1[1], aq2[0], aq2[1]) s = distance(a, b, c) * math.sqrt((b[0]-a[0])**2 + (b[1]-a[1])**2) return s, a, b, c, d z1, z2 = 0, 0 n = len(convex_polygon) # for each edge, find antipodal vertice for it (step 1 in paper). l = antipodal_pairs(convex_polygon) so, ao, bo, co, do, z1o, z2o = 100000000000, None, None, None, None, None, None # step 2 in paper. for z1 in range(0, n): if z1 >= z2: z2 = z1 + 1 p1, p2 = convex_polygon[z1 % n], convex_polygon[(z1+1) % n] a, b, c = convex_polygon[z2 % n], convex_polygon[(z2+1) % n], convex_polygon[l[z2 % n]] if distance(p1, p2, a) >= distance(p1, p2, b): continue while distance(p1, p2, c) > distance(p1, p2, b): z2 += 1 a, b, c = convex_polygon[z2 % n], convex_polygon[(z2+1) % n], convex_polygon[l[z2 % n]] st, at, bt, ct, dt = compute_parallelogram(convex_polygon, l, z1, z2) if st < so: so, ao, bo, co, do, z1o, z2o = st, at, bt, ct, dt, z1, z2 return so, ao, bo, co, do, z1o, z2o
相关问答
更多-
你如何在java swing中绘制并填充平行四边形?(How do you draw and fill a parallelogram in java swing? [closed])[2023-08-01]
所有(或至少大多数)绘图都是通过JPanel并覆盖paintComponent方法完成的。 所以它会像这样开始: public class MyPanel extends JPanel{ @Override public void paintComponent(Graphics g){ //Drawing stuff.... } } 从这里开始,您将要创建一个平行四边形Shape并填充它。 最简单的Shape实现是Path2D 。 public class MyP ... -
如何绘制平行四边形按钮(How to draw a parallelogram button)[2022-06-05]
如果您不需要为按钮设置任何图像, Brain89提供的解决方案很好。 我有背景和内容图像,我需要制作平行四边形按钮而不更改图像。 我用下一个代码: // Pass 0..1 value to either skewX if you want to compress along the X axis // or skewY if you want to compress along the Y axis - (void)parallelogramButtonWithButton:(UIButton *)bu ... -
平行四边形内的随机点(Random points inside a parallelogram)[2023-06-30]
A.如果可以将输入限制为平行四边形,这很简单: 在0和1之间取两个随机数。我们将调用u和v 。 如果您的平行四边形由ABCD点定义,以便AB,BC,CD和DA是侧面,则将您的观点视为: p = A + (u * AB) + (v * AD) 其中AB是从A到B和AD的向量,从A到D的向量。 现在,如果你不能,你仍然可以使用重心坐标。 重心坐标对应于四点到四坐标(a,b,c,d) ,使得a+b+c+d=1 。 然后,四边形内的任何一个点P都可以由一个4脚组成,以便: P = a A + b B + c C ... -
如何确定某个点是否在Python中的某个平行四边形内?(How can I determine if a point is inside a certain parallelogram in Python?)[2021-09-25]
对于平行四边形,有一种比一般多边形更简单的方法。 以c,a,b的顺序获得三个相邻顶点的坐标,并基于AB和AC向量表示AP向量 - 系数应在0..1范围内。 请注意,Delphi和Python函数使用不同的参数顺序。 在Delphi中,基点(a)先行,然后是邻居(b,c),而Python列表依次包含c,a,b(或b,a,c)点。 德尔福代码: function PtInPlgm(ax, ay, bx, by, cx, cy, px, py: Integer): Boolean; var xb, yb, x ... -
您可以通过创建一个自定义组件来手动创建它,该组件将基于自定义THREE.js形状创建一个网格: let points = []; points.push(new THREE.Vector2(0, 0)); points.push(new THREE.Vector2(3, 0)); points.push(new THREE.Vector2(5, 3)); points.push(new THREE.Vector2(2, 3)); for (var i = 0; i < points.length; i++ ...
-
body{ margin: 30px 150px; } .nav-bg { width: 150px;/*for example*/ height: 150px;/*for example*/ background-color:rgba(2, 2, 2, 0.9); -webkit-transform: skew(-60deg); -moz-transform: skew(-60deg); -o-trans ...
-
最后,我找到了制作平行四边形的方法,耶! 这是我如何使它工作。 首先,要创建自定义形状,我必须创建自己的类,扩展mxBasicShape并覆盖createShape方法。 public class Parallelogram extends mxBasicShape { public Shape createShape(mxGraphics2DCanvas canvas, mxCellState state){ mxCell cell = (mxCell)state.getCell(); P ...
-
反平行四边形(Inverse parallelogram)[2022-07-19]
你需要做几件事。 第一个是将最后一个嵌套for循环(打印空格的循环)移动到第一个for循环的开头。 您还需要删除已添加到打印星号的for循环的空间。 然后,对于你向我们展示的输出,你需要在结束时开始主循环并向后移动。 请尝试以下方法: public static void main (String[] args) { Scanner in = new Scanner(System.in); System.out.print("Enter the number of rows: "); ... -
这是我使用的纯Python O(n)实现: import math """ Minimal Enclosing Parallelogram area, v1, v2, v3, v4 = mep(convex_polygon) convex_polygon - array of points. Each point is a array [x, y] (1d array of 2 elements) points should be presented in clockwise order. the ...
-
你没有定义n。 对于空格,使用循环计数器: def print_rect(l, w, c): for a in range(w): print(a*" ", l*c) You didn't define n. For the spaces, use you loop counter: def print_rect(l, w, c): for a in range(w): print(a*" ", l*c)