我需要椭圆化多行文本视图.我的组件足够大,可以显示椭圆至少4行,但只显示2行.我试图改变组件的最小和最大行数,但它什么都没改变.
我有一个R函数,它为散点图产生95%置信度椭圆.输出看起来像这样,每个椭圆(50行)默认为50个点:
[,1] [,2]
[1,] 0.097733810 0.044957994
[2,] 0.084433494 0.050337990
[3,] 0.069746783 0.054891438
Run Code Online (Sandbox Code Playgroud)
我想在ggplot2
散点图上为每个级别的一个名为'site'的因子叠加一些这样的省略号,由这个命令生成:
> plat1 <- ggplot(mapping=aes(shape=site, size=geom), shape=factor(site)); plat1 + geom_point(aes(x=PC1.1,y=PC2.1))
Run Code Online (Sandbox Code Playgroud)
这是在一个数据集上运行,调用dflat
如下所示:
site geom PC1.1 PC2.1 PC3.1 PC1.2 PC2.2
1 Buhlen 1259.5649 -0.0387975838 -0.022889782 0.01355317 0.008705276 0.02441577
2 Buhlen 653.6607 -0.0009398704 -0.013076251 0.02898955 -0.001345149 0.03133990
Run Code Online (Sandbox Code Playgroud)
结果很好,但是当我尝试添加椭圆时(假设这个网站叫做"Buhlen"):
> plat1 + geom_point(aes(x=PC1.1,y=PC2.1)) + geom_path(data=subset(dflat, site="Buhlen"),mapping=aes(x=ELLI(PC1.1,PC2.1)[,1],y=ELLI(PC1.1,PC2.1)[,2]))
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息: "Error in data.frame(x = c(0.0977338099339815, 0.0844334944904515, 0.0697467834016782, :
arguments imply differing number of rows: 50, 211
我过去曾设法解决这个问题,但我不记得怎么做了.似乎geom_path依赖于相同的点而不是绘制新的点.任何帮助,将不胜感激.
在将Internet Explorer的SVG实现基于其自己的VML格式时,我遇到了将SVG椭圆弧转换为VML椭圆弧的问题.
在VML中,弧由下式给出:椭圆上的两个点和半径的长度的两个角度.在SVG中,弧由下式给出:椭圆上的两个点的两对坐标和椭圆边界框的大小
因此,问题是:如何将椭圆上的两个点的角度表示为两对坐标.一个中间问题可能是:如何通过曲线上一对点的坐标找到椭圆的中心.
更新:让我们有一个前提条件,即通常放置椭圆(其半径与线性坐标系轴平行),因此不应用旋转.
更新:此问题与svg:ellipse元素无关,而与svg:path元素中的"a"椭圆弧命令无关(SVG路径:椭圆弧曲线命令)
我害怕XAML盲目.我正在开发一个MS Surface应用程序,我在ScatterViewItem(最终用户可以调整大小的容器)中有一个椭圆.我想保持椭圆为圆(宽度==高度)并保持尽可能大(对于椭圆的宽度/高度属性,应采用SVI宽度/高度的最小值).
优选仅使用XAML解决方案(使用属性触发器或类似方法).
一如既往地非常感谢您的帮助.
我想在WP7上创建一个圆圈.我尝试用椭圆类来做这个,我发现了很多解决方案,它可以制作量表或饼图或其他东西,但我只需要精华.有人可以帮忙吗?
目的是仅显示圆的一部分(或椭圆).就像图片中的黄色区域一样:
谢谢,Laci
我想在MATLAB中重现下图:
有两类具有X和Y坐标的点.我想用一个带有一个标准偏差参数的椭圆围绕每个类,它决定了椭圆沿轴线走多远.
这个图是用另一个软件创建的,我不太清楚它是如何计算椭圆的.
这是我用于此图的数据.第一列是第二列 - 第二列 - 第三列 - 第一列.我可以gscatter
用来绘制点本身.
A = [
0 0.89287 1.54987
0 0.69933 1.81970
0 0.84022 1.28598
0 0.79523 1.16012
0 0.61266 1.12835
0 0.39950 0.37942
0 0.54807 1.66173
0 0.50882 1.43175
0 0.68840 1.58589
0 0.59572 1.29311
1 1.00787 1.09905
1 1.23724 0.98834
1 1.02175 0.67245
1 0.88458 0.36003
1 0.66582 1.22097
1 1.24408 0.59735
1 1.03421 0.88595
1 1.66279 0.84183
];
gscatter(A(:,2),A(:,3),A(:,1))
Run Code Online (Sandbox Code Playgroud)
仅供参考,这是关于如何绘制椭圆的SO问题.所以,我们只需知道绘制它的所有参数.
更新:
我同意可以将中心计算为X和Y坐标的平均值.可能我必须PRINCOMP
对每个类使用主成分分析()来确定角度和形状.仍然在想...
我正在处理地理信息,最近我需要绘制一个椭圆.为了与OGC约定兼容,我不能原样使用椭圆; 相反,我使用多边形近似椭圆,通过采用椭圆包含的多边形并使用任意多个点.
我用于为给定数量的点N生成椭圆的过程如下(使用C#和虚构的Polygon类):
Polygon CreateEllipsePolygon(Coordinate center, double radiusX, double radiusY, int numberOfPoints)
{
Polygon result = new Polygon();
for (int i=0;i<numberOfPoints;i++)
{
double percentDone = ((double)i)/((double)numberOfPoints);
double currentEllipseAngle = percentDone * 2 * Math.PI;
Point newPoint = CalculatePointOnEllipseForAngle(currentEllipseAngle, center, radiusX, radiusY);
result.Add(newPoint);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,这对我很有帮助,但我注意到它有一个问题:如果我的椭圆是'矮胖',也就是说,radiusX比radiusY大得多,那么椭圆顶部的点数就是与椭圆左侧的点数相同.
这是浪费点的使用!在椭圆的上半部分添加一个点几乎不会影响多边形近似的精度,但在椭圆的左边部分添加一个点会产生重大影响.
我真正喜欢的是用多边形逼近椭圆的更好算法.我需要这个算法:
我想到的是找到一个多边形,其中每两条线之间的角度总是相同的 - 但不仅我不知道如何产生这样的多边形,我甚至不确定是否存在,甚至如果我删除限制!
有没有人知道如何找到这样的多边形?
如何测试点P = [xp,yp]是否在由中心C = [x,y],a,b和phi(旋转角度)给出的某个旋转椭圆的内部/外部?
此时我正在使用以下解决方案:旋转椭圆并用角度-phi指向,然后对点的位置和"非旋转"椭圆进行常见测试.
但是有很多测试点(数千),我觉得这个解决方案很慢.有没有直接和更有效的方法来获得旋转椭圆和点的位置?
我不需要代码而是算法.谢谢你的帮助.
很抱歉,如果这是一个愚蠢的问题,但是有一种简单的方法可以在Python中使用matplotlib.pyplot绘制椭圆吗?我希望有类似matplotlib.pyplot.arrow的东西,但我找不到任何东西.
使用带有draw_artist或类似功能的matplotlib.patches是唯一的方法吗?我希望有一个更简单的方法,但文档没有提供太多帮助.
谢谢你的建议!
我有一个椭圆,由中心点,radiusX和radiusY定义,我有一个Point.我想在椭圆上找到最接近给定点的点.在下图中,那将是S1.
现在我已经有了代码,但在其中的某个地方存在逻辑错误,我似乎无法找到它.我将问题分解为以下代码示例:
#include <vector>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <math.h>
using namespace std;
void dostuff();
int main()
{
dostuff();
return 0;
}
typedef std::vector<cv::Point> vectorOfCvPoints;
void dostuff()
{
const double ellipseCenterX = 250;
const double ellipseCenterY = 250;
const double ellipseRadiusX = 150;
const double ellipseRadiusY = 100;
vectorOfCvPoints datapoints;
for (int i = 0; i < 360; i+=5)
{
double angle = i / 180.0 * CV_PI;
double x = ellipseRadiusX * cos(angle);
double y = ellipseRadiusY * sin(angle); …
Run Code Online (Sandbox Code Playgroud)