您现在的位置是:主页 > news > 河南网站优化要多少钱/网络营销策划书的范文

河南网站优化要多少钱/网络营销策划书的范文

admin2025/4/30 20:30:49news

简介河南网站优化要多少钱,网络营销策划书的范文,做网站横幅用什么软件好,wordpress 查询语句我有一个二维点的列表(x1,y1),(x2,y2)......(Xn,Yn)代表弯曲的线段,是否有任何公式可以确定该线段的绘制方向是顺时针还是 逆时针方向?任何帮助表示赞赏段如何具有顺时针/反顺时针方向?确切的定…

河南网站优化要多少钱,网络营销策划书的范文,做网站横幅用什么软件好,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。我已经达到我今天的最高票数。