c++-winrt - Win2D如何画半个椭圆?
问题描述
我想在 C++/winrt 应用程序中使用 Win2D 绘制椭圆弧的下半部分或上半部分。我可以画出曲线,但它在开始处包含一条对角线,看起来好像我从一条直线段开始 - 好像该图形不是从弧线开始,而是向下和向右一段距离。如何将绘图限制为仅圆弧?这是代码和结果的图像:
float2 arcSize(100, 6);
auto pathBuilder = CanvasPathBuilder(drawingSession.Device());
pathBuilder.BeginFigure(244, 175);
//Starting at 3 o"clock, sweep pi radians, that is, to 9:00
pathBuilder.AddArc(arcSize,50,6,0.0, 3.14);
pathBuilder.EndFigure(CanvasFigureLoop::Open); //Don't close path
auto geometry = CanvasGeometry::CreatePath(pathBuilder);
session.DrawGeometry(geometry,244, 175, Colors::Black(),1.5);
解决方案
好的,多亏了 Inspectable 的提示,我有了解决方案:问题出在路径开始的地方。在我的代码中,我错误地将建议的弧尺寸用作 AddArc 的第一个参数,而实际上应该是弧中心坐标。在这条弧线的情况下,BeginFigure 必须是位于右边缘的点,即圆圈中的 3:00。如果 ArcCenter 相对于 BeginFigure 正确,则 AddArc 不会绘制额外的线。[更新:] ps 在这种情况下,DrawGeometry 调用的 x 和 y 坐标应为零;从 BeginFigure 的原始坐标处绘制它,而不是偏移量。也许这个 ps 可以让我在这个问题上获得另一个-1。
推荐阅读
- python - Python:计算 HTML 中的特定单词
- math - 方阵的 sympy Exp 给出索引错误
- python - 如何设置次要刻度的范围?
- c# - 从 IFormFile 异常中获取内存流
- automation - 如何在 UiPath 的弹出面板上指示元素?
- laravel - 带有 nginx 服务器的 Lavarel 项目返回 404|未找到,但在默认 /var/www/html 根目录下工作正常
- appium-ios - Appium iOS iOSNsPredicate 评估多个元素如何指定其中之一?
- r - numericDeriv 改变 R 中 eval 的结果?
- telnet - 捕获 telnet 密码 tcpdump
- r - 使用r中的for循环重新调整具有给定不同参考水平的许多变量