您现在的位置是:主页 > news > 河南网站优化要多少钱/网络营销策划书的范文
河南网站优化要多少钱/网络营销策划书的范文
admin2025/4/30 20:30:49【news】
简介河南网站优化要多少钱,网络营销策划书的范文,做网站横幅用什么软件好,wordpress 查询语句我有一个二维点的列表(x1,y1),(x2,y2)......(Xn,Yn)代表弯曲的线段,是否有任何公式可以确定该线段的绘制方向是顺时针还是 逆时针方向?任何帮助表示赞赏段如何具有顺时针/反顺时针方向?确切的定…
我有一个二维点的列表(x1,y1),(x2,y2)......(Xn,Yn)代表弯曲的线段,是否有任何公式可以确定该线段的绘制方向是顺时针还是 逆时针方向?
任何帮助表示赞赏
段如何具有顺时针/反顺时针方向?确切的定义是什么?
该段是手写阿拉伯字符的弯曲部分
您能否提供一个数据示例?
这非常模棱两可。考虑半月形。您可以顺时针或逆时针跟踪曲线。这是非常错误的形式。
@rayryeng我猜这就是他想要检测的:如何跟踪形状。列表中点的顺序在每种情况下都会有所不同
@LuisMendo-好的,我明白了。您可以做的一件事就是给曲线,找到它的质心。完成此操作后,找到曲线上每个点与该质心所成的角度。此后,使用diff并查看点之间的相邻差异。如果此输出向量中每个元素的diff元素为正,则可以将其视为顺时针,如果为负,则可以将其视为逆时针。也许制作一个正数和负数的直方图,无论哪个bin的计数更高,那就是选择的方向
@Yvon-我同意。艾哈迈德(Ahmed):如果您可以提供一些可以与我们合作的示例点,那将使我们的生活更加轻松。
艾哈迈德(Ahmed):一个问题-这个曲面是否会闭合(即圆形)?如果是这样,那么我的方法将不起作用,因为当您开始接近两端相交的位置时,它将变得非常模棱两可。
@rayryeng不,它不是封闭的,可能是半月形,四分之一或任何类似形状,但从未封闭
@rayryeng我正在输入答案,然后看到您的评论。我认为我的回答或多或少是您的建议
@rayryeng如何在笛卡尔坐标中进行追踪? 1)无需找到质心2)无需平滑角度。仅粗略地估算移动趋势。
@rayryeng我认为您可以通过解开相位来消除您所指的歧义(由点表示的采样足够精细)。那就是我在回答中所做的。
@LuisMendo-正确。忘记了unwrap。好地方!
@ahmedab??obakr-在这种情况下,Luis Mendos(基本上是我的修改版)方法将起作用。祝好运!
@Yvon-根据曲线可能不起作用。例如,考虑一个问号。有一个半月,它是顺时针绘制的,但随后有一个水平段,朝相反方向朝起点移动。通过在笛卡尔坐标中追踪它,我们将同时检测到CW和CCW的变化,而如果您计算与质心的角度,则这将主要表示为顺时针方向。建议还是一件好事!
@rayryeng的另一种方法:从起点到终点画一条线。这条线确实是向量。一条CW曲线在这条线的RHS中占大部分。对于CCW,向左。
@Yvon-嗯!另一个有趣的方法。潜在的警告。考虑从+90度到-90度的半月。这将从曲线的顶部到曲线的底部绘制一条垂直线。使用这个标准,我们不确定通过查看起点和终点的笛卡尔点来确定这个半月的方向。
@rayryeng不!您的示例非常典型。对于CCW,其质心在向量的LHS上。对于CW,RHS。因为它是向量而不是直线,所以我们总是可以分辨出是左还是右。
@Yvon-哦,是的。我完全误解了你的榜样。这可能有效。试试看,然后将其发布为其他答案。我想看这个作品!
或者,您可以使用一些线性代数。如果按顺序有三个点a,b和c,请执行以下操作:
1) create the vectors u = (b-a) = (b.x-a.x,b.y-a.y) and v = (c-b) ...
2) calculate the cross product uxv = u.x*v.y-u.y*v.x
3) if uxv is -ve then a-b-c is curving in clockwise direction (and vice-versa).
通过以相同的方式跟踪较长的曲线,您甚至可以检测出" s"形曲线何时从顺时针方向变为??逆时针方向变化(如果有用)。
对我来说,这是迄今为止最好的解决方案。 +1
@rayryeng:您是什么意思,一个点需要保持恒定?
@seb-没关系。我误读了算法。我要删除我的评论是胡说八道。
@Penguino:我有N个点,我尝试了您的方法,但是因为我有N个点,所以我对每个两个连续的diff向量的叉积的结果求和,这是正确的吗?
@ahmed:是的,执行x1 = diff(x)y1 = diff(y)之类的操作,然后执行x1 y1的所有连续元素的X乘积
@ahmed是的-如果曲线沿其整个长度沿本地顺时针方向旋转,则将得到所有-ve叉积,因此求和就可以了。但是,如果曲线在整个长度上具有相同的曲率方向,则只需对前三个点进行测试即可节省时间。
一种可能的方法。如果由您的点列表表示的线的采样足够均匀且平滑,并且该线足够简单,则它应该工作得很好。
减去均值以使直线"居中"。
转换为极坐标以获取角度。
展开角度,以确保其增量有意义。
检查总增量是正数还是负数。
我假设您具有x和y向量中的数据。
theta = cart2pol(x-mean(x), y-mean(y)); %// steps 1 and 2
theta = unwrap(theta); %// step 3
clockwise = theta(end)
这仅考虑了所有点的综合作用。它不会告诉您在过程中是否存在"扭结"或具有不同转向方向的部分。
可能的改进是用某种积分代替x和y的平均值。原因是:如果某个地区的采样比较密集,则平均值将偏向该区域,而积分则不会。
是的...这几乎是我编写的建议方法!非常好。我决定对所有差异进行归类,看看哪个符号具有更高的计数,那就是我会选择的那个。这仍然是一个好方法。
路易斯,我尝试了您的方法,它起作用了:)感谢您的帮助@rayryeng非常感谢您的帮助,谢谢
@LuisMendo-我喜欢这篇文章,主要是因为不同的SO用户(Yvon,您和我本人)之间的协作最终得出了对OP有用的答案。谢谢!
@ahmedab??obakr-非常欢迎。很高兴我们可以帮助您解决这个问题!
@rayryeng对不起,如果我(无意间)偷走了您的方法。我正忙于准备答案,完全不知道您在评论中提出了相同的建议
@LuisMendo-那就没问题了。老实说,我不确定我的方法是否行得通。看到您发布了答案,并且OP接受了它,这确认了我脑海中的工作。信誉点仅是次要的。我主要是在这里帮助人们,这篇文章和合作证明了这一点。
现在是我的方法,正如对该问题的评论中提到的那样-
Another approach: draw a line from starting point to ending point. This line is indeed a vector. A CW curve has most of its part on RHS of this line. For CCW, left.
我写了一个示例代码来阐述这个想法。大部分解释可以在代码的注释中找到。
clear;clc;close all
%% draw a spiral curve
N = 30;
theta = linspace(0,pi/2,N); % a CCW curve
rho = linspace(1,.5,N);
[x,y] = pol2cart(theta,rho);
clearvars theta rho N
plot(x,y);
hold on
%% find"the vector"
vec(:,:,1) = [x(1), y(1); x(end), y(end)]; %"the vector"
scatter(x(1),y(1), 200,'s','r','fill') % square is the starting point
scatter(x(end),y(end), 200,'^','r','fill') % triangle is the ending point
line(vec(:,1,1), vec(:,2,1), 'LineStyle', '-', 'Color', 'r')
%% find center of mass
com = [mean(x), mean(y)]; % center of mass
vec(:,:,2) = [x(1), y(1); com]; % secondary vector (start -> com)
scatter(com(1), com(2), 200,'d','k','fill') % diamond is the com
line(vec(:,1,2), vec(:,2,2), 'LineStyle', '-', 'Color', 'k')
%% find rotation angle
dif = diff(vec,1,1);
[ang, ~] = cart2pol(reshape(dif(1,1,:),1,[]), reshape(dif(1,2,:),1,[]));
clearvars dif
% now you can tell the answer by the rotation angle
if ( diff(ang)>0 )
disp('CW!')
else
disp('CCW!')
end
通过比较两个矢量,即旋转矢量[起点->重心]与矢量[起点->终点],始终可以确定点在方向线(矢量)的哪一侧,以及然后将旋转角度与0相比较。几秒钟的心理动画可以帮助您理解。
@rayryeng完成!以及一堆无用的绘图代码。
没用!在大约22分钟内从我+1。我已经达到我今天的最高票数。