早上好,
我被困在 R 中字符串和表达式之间的类型转换。我想绘制一条曲线(使用 curve() 函数),其中一个由字符串定义的方程如下:
curve(x^3)
## Ok, generates a curve as expected
qq<-"x^3"
curve(qq)
Error in UseMethod("qq") :
no applicable method for 'qq' applied to an object of class "c('double', 'numeric')"
Run Code Online (Sandbox Code Playgroud)
我可以理解,第一个 arg 应该是一个表达式。
curve(expr=expression(qq))
Error in curve(expr = expression(qq)) :
'expr' must be a function, or a call or an expression containing 'x'
Run Code Online (Sandbox Code Playgroud)
我无法理解:我对这个人的 expression() 的理解是“... expression 返回一个包含其参数(未计算)的“表达式”类型的向量。”
那么,我必须怎么做才能用由字符串 qq 的内容定义的方程来绘制曲线?
谢谢
杰夫
我正在尝试围绕 3d 曲线的每个点渲染圆圈。基本上试图为曲线创建一个管状结构。但如图所示,圆圈的方向是错误的。下面是我在计算 frenet 框架后对圆形对象的模型矩阵的计算。我哪里错了?作为参考,绿线是切线,蓝色是法线,红色是副法线。
Frenet Frame Calculations:
glm::vec3 pointback = curve_points[i-1];
glm::vec3 pointmid = curve_points[i];
glm::vec3 pointforward = curve_points[i+1];
glm::vec3 forward_tangent_vector = glm::vec3(glm::normalize(pointforward - pointmid)) ;
glm::vec3 backward_tangent_vector = glm::vec3(glm::normalize(pointmid - pointback)) ;
glm::vec3 second_order_tangent = glm::normalize(forward_tangent_vector - backward_tangent_vector);
glm::vec3 binormal = glm::normalize(glm::cross(forward_tangent_vector, second_order_tangent));
glm::vec3 normal = glm::normalize(glm::cross(binormal, forward_tangent_vector));
Run Code Online (Sandbox Code Playgroud)
Model Matrix for Circle calculations
glm::mat3 tbn = glm::mat3(forward_tangent_vector,binormal,normal);
glm::vec3 normal_axis = glm::vec3(0, 1, 0);
//normal_axis = forward_tangent_vector;
glm::vec3 circleNormal = glm::normalize(tbn * normal_axis);
glm::vec3 rotationAxis = glm::cross(normal_axis, circleNormal); …Run Code Online (Sandbox Code Playgroud) 我正在尝试在贝塞尔曲线中包装文本并遵循此链接中的教程,http://www.planetclegg.com/projects/WarpingTextToSplines.html
我通过此代码获得衍生:
function Derivative(x0,x1,x2,t)
{
var mt = 1-t;
var a = mt * mt;
var b = mt * t * 2;
var c = t * t;
var result=a * x0 + b * x1 + c * x2;
return result;
}
Run Code Online (Sandbox Code Playgroud)
所以我用这个代码计算正常:
function Normal(x0,x1,x2,y0,y1,y2,t)
{
var dx = Derivative(x0,x1,x2,t);
var dy = Derivative(y0,y1,y2,t);
var q = Math.sqrt(dx*dx + dy*dy)
return { x: -dy/q, y: dx/q };
};
Run Code Online (Sandbox Code Playgroud)
所以这是结果:有些不对劲,但我不知道在哪里。

谢谢大家!
我使用 ValueAnimator 通过抛物线方式移动 ImageView,它的作用就像一个魅力。现在我正在尝试将另一个动画添加到同一个 ImageView,使用 XML 代码围绕自身旋转。当我单独使用旋转动画(没有 ValueAnimator)时,它工作正常,但是当我同时启动两个动画时,结果完全错误,图像通过错误的方式,有时会阻塞。这是代码:
this.ValueAnimator1 = ValueAnimator.ofFloat(0.0f,1.0f);
this.ValueAnimator1.setDuration(4000);
this.ValueAnimator1.addUpdateListener(new AnimatorUpdateListener(){
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float t = ((Float)ValueAnimator1.getAnimatedValue()).floatValue();
float xPos = p0.x*(1-t)*(1-t) +
p1.x*2*t*(1-t) + p2.x*t*t;
float yPos = p0.y*(1-t)*(1-t) +
p1.y*2*t*(1-t) + p2.y*t*t;
ImageView1.setTranslationX(xPos);
ImageView1.setTranslationY(yPos);
}
});
this.Animation1 = AnimationUtils.loadAnimation(this,R.anim.rotation_projectile);
ImageView1.startAnimation(rotationProjectile);
ValueAnimator1.start();
<?xml version="1.0" encoding="utf-8"?>
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="90"
android:pivotX="50%"
android:pivotY="50%"
android:fillEnabled="true"
android:fillAfter="true"
android:duration="4000"
/>
Run Code Online (Sandbox Code Playgroud) 我在 opengl 中搜索了绘制样条曲线,我发现的解决方案使用许多顶点来绘制它。显然,它们在缩放时会损坏。
如何绘制与缩放无关的平滑曲线,例如矢量图形?在opengl中是否有任何正确的方法可以做到这一点,还是应该是软件渲染方式?
我有一个点列表,这些点表示使用Path对象在画布上绘制的曲线。
path.moveTo(x, y);
for (int i = 0; i < points.size(); i++) {
path.lineTo(points.get(i).x, points.get(i).y);
}
canvas.drawPath(path, paint);
Run Code Online (Sandbox Code Playgroud)
我要实现的功能是设置用户可以触摸和移动的控制点,并根据该移动来改变我的点。Photoshop所做的相同操作会Pen Tool看到图像:

注意:android Path仅用于绘图,我不需要修改Path我需要修改坐标。所以上面的代码可以替换为
canvas.drawLine();
Run Code Online (Sandbox Code Playgroud)
它与Path对象无关。
我想画曲线,但我不知道如何用 WebGL 来做。我有很多想法用 gl.LINE_STRIP 做一些事情,也许画圆(以去掉角)并以某种方式绘制弧形角,或者可能画圆(如直线或其他东西),该怎么办?
我需要将密度线与 geom_histogram 的高度对齐,并在 y 轴而不是密度上保留计数值。
我有这两个版本:
# Creating dataframe
library(ggplot2)
values <- c(rep(0,2), rep(2,3), rep(3,3), rep(4,3), 5, rep(6,2), 8, 9, rep(11,2))
data_to_plot <- as.data.frame(values)
Run Code Online (Sandbox Code Playgroud)
# Option 1 ( y scale shows frequency, but geom_density line and geom_histogram are not matching )
ggplot(data_to_plot, aes(x = values)) +
geom_histogram(aes(y = ..count..), binwidth = 1, colour= "black", fill = "white") +
geom_density(aes(y=..count..), fill="blue", alpha = .2)+
scale_x_continuous(breaks = seq(0, max(data_to_plot$values), 1))
Run Code Online (Sandbox Code Playgroud)
y 刻度显示频率,但 geom_密度线和 geom_histogram 不匹配

# Option 2 (geom_density line and geom_histogram …Run Code Online (Sandbox Code Playgroud) 下面的代码片段在文档上绘制一定次数的随机连接曲线:
function createPath() {
const
dimensions = getWindowDimensions(), svg = document.querySelector( `svg` ),
path = document.createElementNS( `http://www.w3.org/2000/svg`, `path` );
dimensions[0] = dimensions[0]; dimensions[1] = dimensions[1];
svg.appendChild( path );
path.setAttribute(
`d`,
`M ` +
`${getRandomNumber(dimensions[0])} `+`${getRandomNumber(dimensions[1])} `+
`C `+
`${getRandomNumber(dimensions[0])} `+`${getRandomNumber( dimensions[1])}, `+
`${getRandomNumber(dimensions[0])} `+`${getRandomNumber( dimensions[1])}, `+
`${getRandomNumber(dimensions[0])} `+`${getRandomNumber( dimensions[1])} `
)
for( let i = 0; i < 100; i++ ) {
path.setAttribute(
`d`,
path.getAttribute( `d` ) +
`S `+`${getRandomNumber(dimensions[0])} `+`${getRandomNumber(dimensions[1])},`+
`${getRandomNumber(dimensions[0])} `+`${getRandomNumber(dimensions[1])} `
)
}
}
setInterval( setSVGDimensions, 10 …Run Code Online (Sandbox Code Playgroud)我需要创建带圆角的SVG路径,将它们导出到DXF进行切割.我的问题是角落应该是圆弧,而不是一些贝塞尔曲线.
使用arc命令使用直角相对容易,因为半径也是从角落到弧开始处的距离.从其他角度来看,它更复杂.
给定一个角和一个半径,是否有计算弧的起点和终点的公式?

右上角很容易,但左下角非常棘手,因为我必须找出线必须结束的地方并开始弧线.
我发现了一个带有svg椭圆弧的计算,它将一个公式链接起来,将终点转换为中心参数化.这没有用,因为我也不知道圆圈的中心在哪里.
如何计算弧(圆)的SVG路径只计算弧,而不是两条线之间的弧代替锐角.
SVG中三角形圆角的解决方案仅在某些边与坐标系平行或改变半径时才起作用.
将圆角应用于路径/多边形尝试使用一些带有linejoin或几条立方曲线的技巧,我想要什么.
即使我使用圆形来创建这个形状,即使是Inkscape(我以前用于绘制上面的图像)也使用5个立方曲线而不是弧形.
如果您有一些提示我可以如何管理这一点,我将非常感激.