如何使用 QGraphicsItem 仅在圆圈中绘制网格线
How to draw grid line only in a circle using QGraphicsItem
英语不好的请提前见谅
您好!我目前正在使用 QGraphicsView 和 QGraphicsItem 实现视图小部件。
有没有办法只在圆内画网格线?
矩形很好,但试图将它们画在圆圈内是一件痛苦的事情。
下面是示例代码。
for(int x = rect.left(); x <= rect.right(); ++x) {
painter->drawLine(QPointF(x, rect.top()), QPointF(x, rect.bottom()));
}
for(int y = rect.top(); y <= rect.bottom(); ++y) {
painter->drawLine(QPointF(rect.left(), y), QPointF(rect.right(), y));
}
这是我目前的状态 --> Current grid line result
我想要的结果看起来像 -->
Reuslt example what I want
我不想在圆边界外显示网格线。
有什么好的想法欢迎回复
谢谢!
只是测微仪计算的问题。从 X 或 Y 轴上的位置,您可以使用反正弦和反余弦计算到圆上的点的角度。下面的代码应该可以工作
#include <math.h>
class Point
{
public:
double X = 0.0;
double Y = 0.0;
};
int main()
{
double radius = 10.0;
double stepx = 2.0;
double stepy = 2.0;
int stepsInX = radius / stepx;
int stepsInY = radius / stepy;
// this is just for positive X (need another loop for negative X)
for (int i = 0; i <= stepsInX; i++)
{
double angle = acos(i*stepx / radius);
double y = radius * sin(angle);
Point p1;
p1.X = i * stepx;
p1.Y = y;
Point p2;
p2.X = i * stepx;
p2.Y = -y;
drawLine(p1, p2);
}
// this is just for positive Y (need another loop for negative Y)
for (int i = 0; i <= stepsInY; i++)
{
double angle = asin(i * stepy / radius);
double x = radius * cos(angle);
Point p1;
p1.X = x;
p1.Y = i * stepy;
Point p2;
p2.X = -x;
p2.Y = i * stepy;
drawLine(p1, p2);
}
}
void drawLine(Point const& p1, Point const& p2)
{
// your code to draw line here
}
英语不好的请提前见谅
您好!我目前正在使用 QGraphicsView 和 QGraphicsItem 实现视图小部件。
有没有办法只在圆内画网格线?
矩形很好,但试图将它们画在圆圈内是一件痛苦的事情。
下面是示例代码。
for(int x = rect.left(); x <= rect.right(); ++x) {
painter->drawLine(QPointF(x, rect.top()), QPointF(x, rect.bottom()));
}
for(int y = rect.top(); y <= rect.bottom(); ++y) {
painter->drawLine(QPointF(rect.left(), y), QPointF(rect.right(), y));
}
这是我目前的状态 --> Current grid line result
我想要的结果看起来像 --> Reuslt example what I want
我不想在圆边界外显示网格线。
有什么好的想法欢迎回复
谢谢!
只是测微仪计算的问题。从 X 或 Y 轴上的位置,您可以使用反正弦和反余弦计算到圆上的点的角度。下面的代码应该可以工作
#include <math.h>
class Point
{
public:
double X = 0.0;
double Y = 0.0;
};
int main()
{
double radius = 10.0;
double stepx = 2.0;
double stepy = 2.0;
int stepsInX = radius / stepx;
int stepsInY = radius / stepy;
// this is just for positive X (need another loop for negative X)
for (int i = 0; i <= stepsInX; i++)
{
double angle = acos(i*stepx / radius);
double y = radius * sin(angle);
Point p1;
p1.X = i * stepx;
p1.Y = y;
Point p2;
p2.X = i * stepx;
p2.Y = -y;
drawLine(p1, p2);
}
// this is just for positive Y (need another loop for negative Y)
for (int i = 0; i <= stepsInY; i++)
{
double angle = asin(i * stepy / radius);
double x = radius * cos(angle);
Point p1;
p1.X = x;
p1.Y = i * stepy;
Point p2;
p2.X = -x;
p2.Y = i * stepy;
drawLine(p1, p2);
}
}
void drawLine(Point const& p1, Point const& p2)
{
// your code to draw line here
}