Tag: 几何

计算大小改变后插入的CGRect的新来源

我有一个CGRect A和CGRect B ,其中CGRect B在B中居中( CGRect包含矩形的x和y原点以及高度和宽度大小)。 如果我按一定的比例增加A的宽度和高度,并且以相同的比例增加B的宽度和高度,则将以相同的比例乘以B的原点和B的原点(对于宽度和高度恭敬地),那么B将保持在A的中心吗? 我已经在几个不同的情况下testing了这个,它可以工作,但只是想validation它适用于所有情况,因为我不是那么尖锐的math。 另外,想知道是否有一种方法可以简单地让您将CGRect的所有值乘以这个比例,而不必手动执行(在文档中找不到一个)。 更新:实际上,这是行不通的…试图想到一种方法,这将允许我正确地在另一个视图中放置一个视图后,两者的比例增加。

点内圆angular矩形?

我有这个代码来绘制圆angular的矩形: void ContextAddRoundedRect(CGContextRef ctx, CGRect rect, CGFloat radius) { CGFloat minX = CGRectGetMinX(rect); CGFloat maxX = CGRectGetMaxX(rect); CGFloat minY = CGRectGetMinY(rect); CGFloat maxY = CGRectGetMaxY(rect); CGContextMoveToPoint(ctx, minX + radius, minY); CGContextAddArcToPoint(ctx, maxX, minY, maxX, minY + radius, radius); CGContextAddArcToPoint(ctx, maxX, maxY, maxX – radius, maxY, radius); CGContextAddArcToPoint(ctx, minX, maxY, minX, maxY – radius, radius); CGContextAddArcToPoint(ctx, […]

如何实现执行contentStretch逆的UIView?

UIView contentStretch属性定义了内容被拉伸以填充视图的区域。 这是伟大的,但我发现自己需要的是完全相反的:我想要一个视图,我可以定义一个矩形不伸展,但有外边缘伸展,直到他们填充视图。 +——————————————-+ | | | +———-+ | | | | | | | | | | | Content | Stretch to fill | | | | | | | | | | +———-+ | | | +——————————————-+ 所以在上面的观点中,外观是我提出的观点。 内部矩形是不可拉伸的内容。 理想情况下,我希望能够将不可拉伸的内容的中心点定位在外部矩形内的任何位置,并仍然将外部位填充到边缘。 示例使用场景:带有透明中心“洞”的黑色覆盖层,跟随鼠标/触摸用于使用手电筒探索场景等。 我想这样做的一个方法是绘制内容UIView,然后绘制其他四个视图,适当的大小,以覆盖外部区域,但我希望为一个单一的解决scheme更stream畅的animation。 我猜我需要有一个单一的UIView,并使用核心animation下来,混乱它的图层?

SceneKit轨道转换

所以从SceneKit开始,所有的东西都进行得很好,直到我偶然发现了转换,认为它会像层次上的CA3d *转换。 不过,看来我完全错误了,转换工作在Z轴的工作方式上完全不同。 例如,我正试图完成一个3d轨道式的运动,类似于旋转木马的样子。 这块CA3D代码出色地做到这一点: var trans = CATransform3DIdentity trans = CATransform3DRotate(trans, deg * (Float(M_PI)/180), 1, 1, 0) trans = CATransform3DTranslate(trans, 0, 0, 100) layer.transform = trans 如果应用于具有不同“deg”值的多个对象,则会获得一个很好的圆形3d轨道外观。 与SceneKit相同产生不同的结果: var trans = SCNMatrix4Identity trans = SCNMatrix4Rotate(trans,Float(angleTemp*(M_PI/180)), 1, 1, 0) trans = SCNMatrix4Translate(trans, 0, 0, 100) node.transform = transform 实际上,旋转之后,Z值轴根据CAT3D +图层中应用的旋转进行转换和平移,但是在SceneKit中,Z轴始终保持不变,因此平移只会将它们一起移动,所以您只需将其压扁看。 所以我明白这是在真正的3D空间中工作,但现在看来我不得不与Sphereical和Ellipsemath工作一样。 所以任何人都可以给我提示如何做我想做的事情? 我现在正在试验球形math和使用SCNMatrix4Translate,但我还没有得到正确的math呢。 我想我需要的是用公式来计算椭圆的xyz,我之后是非常类似的东西: http://en.wikipedia.org/wiki/Ellipse#mediaviewer/File:Conicas1.PNG […]

在iOS开发中,如果使用Core Graphics和/或Quartz 2D,我怎样才能绘制出一个渐变的圆形,使其看起来像一个球体?

到目前为止,我已经看过使用CGContextDrawLinearGradient()和CGContextDrawRadialGradient(),但是,与前者我无法弄清楚如何使梯度看起来像一个球体,与后者,我不知道如何使渐变成一个球体的形状,因为每次我尝试,它变成了完整的圆柱体而不是只有一个球体的形状。 下面显示了我用来绘制2D圆圈的代码。 我想使用梯度或任何其他方法可能使用只有核心graphics和/或石英2D填充圆的方式,使它看起来像一个球体。 当前绘制圆圈的代码: CGContextRef ctx = UIGraphicsGetCurrentContext(); float x = 20.0; float y = 20.0; float radius = 12.5; CGContextFillEllipseInRect(ctx, CGRectMake(x, y, radius, radius); PS – 上面的代码正如它应该的那样工作,所以万一出现任何错误,他们只是从我的错误input问题,而不是在input代码到实际的文件。

用贝塞尔曲线绘制弧

我正在尝试使用贝塞尔曲线绘制弧线。 我已经知道,你不能用贝塞尔曲线画一个完美的圆,但你可以靠近。 不幸的是,math太复杂了,我不能亲自搞清楚。 我可以创build一个三angular形下面的A1切片,但我不知道如何确定控制点。 另外,如果我尝试在相反的方向上画出一个圆圈,注意控制点似乎指向负方向。 所以,如果我想要一个半径为R的圆的切片,并且已经计算了定位点,那我怎样才能计算出控制点1和控制点2的位置?

如何使用Quartz Core绘制星星?

我试图改编苹果公司提供的一个例子,以编程方式绘制星星,代码如下: CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetLineWidth(context, aSize); for (NSUInteger i=0; i<stars; i++) { CGContextSetFillColorWithColor(context, aColor); CGContextSetStrokeColorWithColor(context, aColor); float w = item.size.width; double r = w / 2; double theta = 2 * M_PI * (2.0 / 5.0); // 144 degrees CGContextMoveToPoint(context, 0, r); for (NSUInteger k=1; k<5; k++) { float x = r * sin(k […]

在与中心点相交的给定angular度的直线相交的UIView矩形上查找CGPoint

在iOS中,我试图确定一个矩形上的点,该矩形以预定angular度从中心点到矩形的边界的假想线相交。 说我知道中心点,矩形的大小和angular度(从东经0度开始,再向北逆时针经过90度,向东逆时针经过90度,西经180度,南经360度)。 我需要知道相交点的坐标。 对于给定angular度的矩形上的查找点,有点令人困惑的(对我来说)math的,但可能是准确的答案导致我尝试下面的代码,但它不能正常工作。 这个问题类似于那个,但我正在寻找一个更正的Objective-C / iOS方法,而不是一般的math响应。 我认为代码问题的一部分与使用单个0到360度angular度(弧度不可能有负数)input有关,但可能还有其他问题。 下面的代码主要使用belisarius的答案中定义的符号,包括我为在这里定义的四个区域中的每一个计算相交点的尝试。 这段代码在我的UIImageView子类中: – (CGPoint) startingPointGivenAngleInDegrees:(double)angle { double angleInRads = angle/180.0*M_PI; float height = self.frame.size.height; float width = self.frame.size.width; float x0 = self.center.x; float y0 = self.center.y; // region 1 if (angleInRads >= -atan2(height, width) && angleInRads <= atan2(height, width)) { return CGPointMake(x0 + width/2, y0 + width/2 […]

评估拍照事物的最佳方法是哪一种?

我的应用程序应该使用欧元硬币作为参考来估计对象的长度(以毫米为单位)。 这是一个截图示例: 为了得到被拍摄的硬币的直径,我首先计算出通过这三个点的圆的方程 x^2 + y^2 + ax + by + c = 0 然后我有直径 2 * square_root((a/2)^2 + (b/2)^2 -c) 。 最后我可以用下面的比例来得到红笔的长度: /* length_estimated_pen (mm) : distance_green_pins (points) = real_diameter_coin (mm) : diameter_on_screen (points) */ let distanceGreen:Double = Double(sqrt(pow(self.greenLocationA.center.x – self.greenLocationB.center.x, 2.0) + pow(self.greenLocationA.center.y – self.greenLocationB.center.y, 2.0))) let estimatedMeasure:Double = (distanceGreen * Double(ChosenMeter.moneyDiameter)) / […]