我需要找到从圆和矩形的交点创建的最大弧线。我有了圆心,半径和矩形的坐标,我需要找到与圆心交点的角。
我有一个可以工作的代码,但它是通过迭代圆周上的点来计算解的,我想知道是否有更优雅的方法来使用三角学而不是“蛮力”来计算解。
这是我的代码:
import 'dart:math';
class CircleTheSquare {
final Point _circleCenter;
final int _circleRadius;
final Rectangle _box;
CircleTheSquare(this._circleCenter, this._circleRadius, this._box);
Map<String, double> get arc {
Map res = new Map();
double angle = .0;
double angleIn;
double angleOut;
double increment = 1.0;
while (true) {
if (angle > 360.0 && angleIn == null) {
break;
}
// Finds a point of intersection (next points will be inside
// of the rectangle).
if (!_isOutside(angle) && _isOutside(angle - increment)) {
angleIn = angle;
}
// Finds next intersection (next points will be outside
// of the rectangle).
if (angleIn != null &&
_isOutside(angle + increment) && !_isOutside(angle)) {
angleOut = angle;
// Adds the arc to result only there's not a previous largest arc.
if (res["in"] == null ||
angleOut - angleIn > res["arc"]) {
res["in"] = angleIn;
res["arc"] = angleOut - angleIn;
}
angleIn = null;
angleOut = null;
}
angle += increment;
}
// If there's no intersections.
// -- For simplicity, we will assume that the
// rectangle and the circle intersect or that the circle is
// inside of the rectangle).
if (res["in"] == null) {
res = {"in" : 0.0, "arc" : 360.0};
}
return res;
}
bool _isOutside(double a) {
var res;
double cx = _circleCenter.x + (_circleRadius * cos(a * (PI / 180)));
double cy = _circleCenter.y + (_circleRadius * sin(a * (PI / 180)));
bool hOut = cx < _box.left || cx > _box.left + _box.width;
bool vOut = cy < _box.top || cy > _box.top + _box.height;
if (hOut || vOut) {
res = true;
} else {
res = false;
}
return res;
}
}
main() {
CircleTheSquare a = new CircleTheSquare(new Point(250, 250), 100,
new Rectangle(0,0,500,500));
print(a.arc); // {in: 0.0, arc: 360.0}
CircleTheSquare b = new CircleTheSquare(new Point(450, 250), 100,
new Rectangle(0,0,500,500));
print(b.arc); // {in: 60.0, arc: 240.0}
CircleTheSquare c = new CircleTheSquare(new Point(420, 420), 100,
new Rectangle(0,0,500,500));
print(c.arc); // 4 intersections, returns the largest arc:
// {in: 127.0, arc: 196.0}
}
问题内容: 我正在寻找一种确定矩形和圆形之间相交区域的快速方法(我需要进行数百万次此类计算)。 一个特殊的属性是,在所有情况下,圆形和矩形始终具有2个相交点。 问题答案: 给定2个交点: *圆内有 *0个顶点 :圆形线段的面积 1个顶点 在圆内:圆弧段和三角形的面积之和。 *圆内有 *2个顶点 :两个三角形和一个圆形线段的面积之和 *圆内有 *3个顶点 :矩形的面积减去三角形的面积再加上圆形线段的
我有一个问题,碰撞检测一个圆和一个矩形。我曾尝试用勾股定理来解决这个问题。但所有查询都不起作用。矩形与圆的矩形包围盒发生碰撞。
主要内容:圆角矩形,椭圆示例JavaFX Shape类定义了常见的形状,例如线,矩形,圆,Arc,CubicCurve,Ellipse和QuadCurve。 在场景图上绘制矩形需要宽度,高度和左上角的(,)位置。 要在JavaFX中绘制一个矩形,可以使用类。 上面的代码生成以下结果。 圆角矩形 类实现了弧宽和弧高。可以使用这些功能来绘制圆角矩形。 上面的代码生成以下结果。 椭圆示例 上面的代码生成以下结果。
我正在编写一个游戏,涉及碰撞的一个移动的圆,由用户控制,和一个移动的矩形,由计算机控制。 完整的代码可以在这里找到:游戏 我在圆和矩形之间的碰撞检测方面遇到了麻烦。当矩形是静态的,碰撞检测工作完美。当圆和矩形的边缘在任一边接触时,程序就会按照它应该的方式进行操作。 这是碰撞检测功能。 谢谢。
本文向大家介绍Android实现圆角矩形和圆形ImageView的方式,包括了Android实现圆角矩形和圆形ImageView的方式的使用技巧和注意事项,需要的朋友参考一下 Android中实现圆角矩形和圆形有很多种方式,其中最常见的方法有ImageLoader设置Option和自定义View。 1.ImageLoader加载图片 ImageLoader.getInstance().displa
问题内容: 我设法实现了这种效果但是我对标记并不满意。另外,在IE10/11中有一个奇怪的错误,在您调整窗口大小时会显示1px的间隙。 还有其他方法吗?或者也许在IE中修复此问题。 编辑 圆不能使用边框,它应该是透明的。 问题答案: 您可以使用单个元素(加上伪元素)来完成此操作,而伪元素会创建圆,而父元素将背景用作背景。