我想在两点之间画一条弧线。我知道两个点的位置和弧度的角度。我成功地写了一个小程序来计算圆心,有效地画出了圆弧。但是当我画一个圆来验证时,当我用小的弧度值时,圆线不交叉给出的两点。
#include <QApplication>
#include <QGraphicsEllipseItem>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QDebug>
#include <cmath>
#include <QPainter>
void cross(QPainterPath* path, double x, double y);
int main( int argc, char **argv )
{
QApplication app(argc, argv);
QGraphicsScene scene;
scene.setSceneRect( 0.0, 0.0, 500.0, 500.0 );
QPainterPath* path = new QPainterPath();
double x1, x2, y1, y2, l, rad, r;
double x3, y3, xx, yy;
const double PI = 3.14159265358979323846;
//first point
x1=250;
y1=250;
//second point
x2=350;
y2=300;
//radians - play with it. This is low value - this is buggy
rad=0.002;
l=sqrt (pow((x1-x2),2) + pow((y1-y2),2)); //distance between (x1,y) and (x2,y2)
u=180.0 * rad / PI; //transform radians in angle
r=(l/2.0)/sin(rad/2.0); //this is radius
//point in the middle of (x1,y) and (x2,y2)... half of l
x3 = (x1+x2)/2;
y3 = (y1+y2)/2;
//find center of circle
if(rad>0){
xx = x3 + sqrt(pow(r,2)-pow((l/2),2))*(y1-y2)/l;
yy = y3 + sqrt(pow(r,2)-pow((l/2),2))*(x2-x1)/l;
}else{
xx = x3 - sqrt(pow(r,2)-pow((l/2),2))*(y1-y2)/l;
yy = y3 - sqrt(pow(r,2)-pow((l/2),2))*(x2-x1)/l;
}
//draw circle to verify
path->moveTo(xx, yy);
path->addEllipse(QRectF(xx-r,yy-r,r*2,r*2));
cross(path, x3,y3);
cross(path, xx,yy);
cross(path, x1,y1);
cross(path, x2,y2);
qDebug() << "r =" << r << " xx =" << xx << " yy =" << yy ;
qDebug() << "Verify r - distance from (x1,y1) to center of circle" << sqrt (pow((x1-xx),2) + pow((y1-yy),2));
qDebug() << "Verify r - distance from (x2,y2) to center of circle" << sqrt (pow((x2-xx),2) + pow((y2-yy),2));
scene.addPath(*path);
QGraphicsView view( &scene );
view.show();
return app.exec();
}
void cross(QPainterPath* path, double x, double y){
path->moveTo(x, y-5);
path->lineTo(x, y+5);
path->moveTo(x-5, y);
path->lineTo(x+5, y);
}
但两点到圆心的距离等于计算半径。我哪里错了?
我知道这个帖子很旧,但因为它已经被浏览了1K次,没有人回复,我想我应该加入进来。
我相信QT中的绘制椭圆函数是使用4条bezier曲线来创建形状。用bezier曲线来表示一个圆没有完美的方法,相反,你需要瞄准你能得到的最接近的近似值。
出于我的目的,我发现这个bezier曲线圆近似堆栈溢出帖子非常有帮助。我确定的解决办法是用大量的弧来近似这个圆,从点开始,以保证我的圆看起来穿过它。
希望下次出现这种情况时,这能帮助某人。
我到底需要在椭圆形矩形中设置什么,以及如何计算起始角和扫掠角? 我尝试了下面的代码:
问题内容: 我需要为自己的Point类计算两个点之间的角度,以度为单位,Point a为中心点。 方法: 测试1://返回45 测试2://返回-90,预期值:270 如何将返回的结果转换为0到359之间的数字? 问题答案: 您可以添加以下内容: 顺便说一句,为什么您不想在这里使用双精度?
问题内容: 我正在尝试计算python中两条线之间的角度。我搜索了互联网,找到了如何做的方程式。但是我并不总是能得到准确的结果。当其他结果似乎正确时,其中一些结果显然是错误的。我的代码如下: 它产生的结果是: 问题是我不明白为什么第二个结果,第五个和最后一个结果被归零,因为它们共享一个点,而另一个点却不重复,因为数组中的值不同。 问题答案: 看起来您正在使用Python2,如果两个参数均为int
我试图画一个圆弧,基于两个给定的点和一个给定的高度来描述一个圆段。为了实现这一点,我将使用java.awt.graphics中的以下方法。 首先,我观察到x、y、width和height值描述了一个包含圆的矩形。 圆弧的中心是原点为(x,y)的矩形的中心,其大小由width和height参数指定。(http://docs.oracle.com/javase/7/docs/api/java/awt/
如下所示绘制整圆弧的方法,能否只用一个a命令绘制一个整圆弧,或者大于180度的圆弧?
怎么求b相对于a点的弧度,js中通过鼠标点来求.