이것은 명시/비모수 이차 베 지어 곡선에 관한 것입니다. 일반적으로 X 변수가 함수이기도하므로 (Bézier = 매개 변수 함수) 2 차 베 지어 곡선을 3 포인트에 맞출 수는 없지만 제어점이 등거리이면 다음과 같이 할 수 있습니다. 명시/비모수 베 지어 기능. 2 차원 평면에서 3 개의 무작위 점에 2 차 bernstein 다항식을 맞추고 싶습니다. 3 개의 제어점의 x 축 좌표는 등거리 여야합니다. 또한 (외부) 제어점은 평소처럼 2 개의 외부 데이터 점과 일치하지 않아도됩니다.2D의 비점 수 2 차 베 지어 곡선 (in R)
방정식 세트를 해결해야하지만, 어떤 방정식을 해결해야할까요? 그리고 내가 설정 한 한계를 감안할 때 (3 개의 데이터 포인트, 제어 포인트가 동일한 수평 거리, 데이터 포인트가 아닌 제어 포인트로 곡선을 그리는 경우) R에서 어떻게해야합니까?
2 차 베 지어 함수는 B (t)입니다. 당신은 R이를 실행하면 = (1-t)^2 * P0 + 2 * t의 * (1-t) * P1의 + t^2 * P2,
, 당신은 무슨 의미가 표시됩니다
Here '
# control points are equidistant: here the horizontal distance is 20
cpx<-c(-20,0,20)
# y-values can be random
cpy<-c(0,2,-4)
t<-seq(0,1,len=101)
# the 3 control points
P0<-matrix(data=c(cpx[1],cpy[1]),nrow=1,ncol=2,byrow=FALSE,dimnames=NULL)
P1<-matrix(data=c(cpx[2],cpy[2]),nrow=1,ncol=2,byrow=FALSE,dimnames=NULL)
P2<-matrix(data=c(cpx[3],cpy[3]),nrow=1,ncol=2,byrow=FALSE,dimnames=NULL)
# the quadratic Bernstein polynomial:
B<-(1-t)^2%*%P0+2*t*(1-t)%*%P1+t^2%*%P2
par(mfrow=c(1,1))
plot(cpx,cpy,type="p",pch=20,xlab="",ylab="")
abline(v=c(min(cpx),max(cpx)),lty=3,col='red')
text(cpx[1],cpy[1],"P0",cex=.8,pos=4)
text(cpx[2],cpy[2],"P1",cex=.8,pos=1)
text(cpx[3],cpy[3],"P2",cex=.8,pos=2)
segments(cpx[1],cpy[1],cpx[2],cpy[2],lty=3);segments(cpx[2],cpy[2],cpx[3],cpy[3],lty=3)
lines(B,col="DeepSkyBlue")
# 3 random points on the curve:
pnts<-sort(sample(1:length(t),3,replace=F),decreasing=F)
point1<-pnts[1]
point2<-pnts[2]
point3<-pnts[3]
points(B[point1,1],B[point1,2],col='orange',pch=20)
points(B[point2,1],B[point2,2],col='orange',pch=20)
points(B[point3,1],B[point3,2],col='orange',pch=20)
segments(B[point1,1],B[point1,2],B[point2,1],B[point2,2],lwd=2,col='orange',lty=1)
segments(B[point2,1],B[point2,2],B[point3,1],B[point3,2],lwd=2,col='orange',lty=1)
은 유사하지만 동일하지 않은 주제를이야.
Here 및
here 멋진 베 지어 애니메이션.
감사 | 여기
내가 (나 A)를 넣어 행렬입니다 당신의 답장을 위해, 그러나 "나는 당신이 맞추려고하는 점들이 당신의 x 범위 [-20..20]에 있다고 생각합니까?" 아닙니다. 제어점의 위치가 어디인지, 단지 등거리가되어야하는지, 데이터 점의 3 개의 X 축 좌표가 제어점의 X 축 좌표 사이가 될지, . – MisterH나는 또한 이것을 http://pomax.github.io/bezierinfo/#moulding (및 다음 섹션)에서 다루고 있으며 소스는 링크되어 있다고 덧붙이고 싶다. 몇 가지 자유도가 있습니다 : 2 차 곡선의 경우 "중간"점에서 나타낼 "t"값을 선택하면 비교적 간단합니다. 3 차 곡선의 경우 접선 벡터뿐만 아니라 "t"값을 선택해야합니다. 그러면 다시 간단한 솔루션입니다. –
""중간 점 "을 나타낼"t "값을 선택하게되지만, 내 질문과 같이 이것이 명확하지 않으면 어떻게됩니까? 이것은 비모수 이차 베 지어 곡선을 3 점에 맞추는 것이 아닙니다 : 바깥 쪽 컨트롤 포인트가 바깥 쪽 데이터 포인트와 일치하지 않습니다. 나는 이것이 대부분의 질문 들과는 다소 다르다는 것을 알고 있습니다. 그러나 그것이 흥미로운 것입니다. – MisterH